11#ifndef __FORCES_AND_SOURCES_CORE__HPP__
12#define __FORCES_AND_SOURCES_CORE__HPP__
14using namespace boost::numeric;
27 typedef boost::function<int(
int order_row,
int order_col,
int order_data)>
31 int order_row,
int order_col,
177 const EntityType type,
178 boost::ptr_vector<EntitiesFieldData::EntData> &data)
const;
189 const EntityType type,
const FieldSpace space,
190 boost::ptr_vector<EntitiesFieldData::EntData> &data)
const;
199 template <EntityType type>
212 template <EntityType type>
223 template <
typename EXTRACTOR>
227 VectorInt &local_nodes_indices, EXTRACTOR &&extractor)
const;
231 const int bit_number)
const;
235 const int bit_number)
const;
237 template <
typename EXTRACTOR>
240 const EntityType type_lo,
241 const EntityType type_hi,
242 EXTRACTOR &&extractor)
const;
246 const EntityType type_lo = MBVERTEX,
247 const EntityType type_hi = MBPOLYHEDRON)
const;
251 const EntityType type_lo = MBVERTEX,
252 const EntityType type_hi = MBPOLYHEDRON)
const;
257 boost::shared_ptr<FENumeredDofEntity_multiIndex> dofs,
262 const int bit_number)
const;
266 const int bit_number)
const;
287 const int bit_number)
const;
296 const int bit_number)
const;
300 const EntityType type_lo = MBVERTEX,
301 const EntityType type_hi = MBPOLYHEDRON)
const;
326 EntityType type,
int side_number,
332 EntityType type,
int side_number,
337 EntityType type,
int side_number,
379 virtual int getRule(
int order_row,
int order_col,
int order_data);
460 const std::array<boost::shared_ptr<EntitiesFieldData>,
LASTSPACE>
467 const std::array<boost::shared_ptr<EntitiesFieldData>,
LASTSPACE>
589 const bool symm =
true);
592 const bool symm =
true);
595 const std::string col_field_name,
const char type,
596 const bool symm =
true);
600 inline boost::shared_ptr<const NumeredEntFiniteElement>
635 const EntityType type);
670 const EntityType type);
694 const EntityType type,
const int side,
712 const EntityType type,
const int side,
794 inline Vec
getTSu()
const;
800 inline Vec
getTSf()
const;
802 inline Mat
getTSA()
const;
804 inline Mat
getTSB()
const;
812 inline double getTSa()
const;
904 std::vector<boost::weak_ptr<NumeredEntFiniteElement>>>;
923 boost::shared_ptr<Range> fe_range =
nullptr,
924 const int verb =
QUIET,
943 const int verb =
QUIET,
958 const int verb =
QUIET,
973 const int verb =
QUIET,
988 boost::shared_ptr<Range> fe_range,
989 const int verb =
QUIET,
1016boost::shared_ptr<const NumeredEntFiniteElement>
1017ForcesAndSourcesCore::UserDataOperator::getNumeredEntFiniteElementPtr()
const {
1021EntityHandle ForcesAndSourcesCore::UserDataOperator::getFEEntityHandle()
const {
1022 return getNumeredEntFiniteElementPtr()->getEnt();
1025int ForcesAndSourcesCore::UserDataOperator::getFEDim()
const {
1029EntityType ForcesAndSourcesCore::UserDataOperator::getFEType()
const {
1033boost::weak_ptr<SideNumber>
1034ForcesAndSourcesCore::UserDataOperator::getSideNumberPtr(
1035 const int side_number,
const EntityType type) {
1036 auto &side_table_by_side_and_type =
1037 ptrFE->numeredEntFiniteElementPtr->getSideNumberTable().get<1>();
1039 side_table_by_side_and_type.find(boost::make_tuple(type, side_number));
1040 if (side_it != side_table_by_side_and_type.end())
1043 return boost::weak_ptr<SideNumber>();
1047ForcesAndSourcesCore::UserDataOperator::getSideEntity(
const int side_number,
1048 const EntityType type) {
1049 if (
auto side_ptr = getSideNumberPtr(side_number, type).lock())
1050 return side_ptr->ent;
1055int ForcesAndSourcesCore::UserDataOperator::getNumberOfNodesOnElement()
const {
1056 return ptrFE->getNumberOfNodes();
1059const FEMethod *ForcesAndSourcesCore::UserDataOperator::getFEMethod()
const {
1063int ForcesAndSourcesCore::UserDataOperator::getOpType()
const {
return opType; }
1065void ForcesAndSourcesCore::UserDataOperator::setOpType(
const OpType type) {
1069void ForcesAndSourcesCore::UserDataOperator::addOpType(
const OpType type) {
1073int ForcesAndSourcesCore::UserDataOperator::getNinTheLoop()
const {
1074 return getFEMethod()->getNinTheLoop();
1077int ForcesAndSourcesCore::UserDataOperator::getLoopSize()
const {
1078 return getFEMethod()->getLoopSize();
1081std::string ForcesAndSourcesCore::UserDataOperator::getFEName()
const {
1082 return getFEMethod()->getFEName();
1086ForcesAndSourcesCore::UserDataOperator::getDataCtx()
const {
1087 return getFEMethod()->data_ctx;
1091ForcesAndSourcesCore::UserDataOperator::getKSPCtx()
const {
1092 return getFEMethod()->ksp_ctx;
1096ForcesAndSourcesCore::UserDataOperator::getSNESCtx()
const {
1097 return getFEMethod()->snes_ctx;
1101ForcesAndSourcesCore::UserDataOperator::getTSCtx()
const {
1102 return getFEMethod()->ts_ctx;
1105Vec ForcesAndSourcesCore::UserDataOperator::getKSPf()
const {
1107 if (getFEMethod()->
ksp_f == PETSC_NULLPTR)
1110 return getFEMethod()->ksp_f;
1113Mat ForcesAndSourcesCore::UserDataOperator::getKSPA()
const {
1115 if (getFEMethod()->
ksp_A == PETSC_NULLPTR)
1118 return getFEMethod()->ksp_A;
1121Mat ForcesAndSourcesCore::UserDataOperator::getKSPB()
const {
1123 if (getFEMethod()->
ksp_B == PETSC_NULLPTR)
1126 return getFEMethod()->ksp_B;
1129Vec ForcesAndSourcesCore::UserDataOperator::getSNESf()
const {
1131 if (getFEMethod()->
snes_f == PETSC_NULLPTR)
1134 return getFEMethod()->snes_f;
1137Vec ForcesAndSourcesCore::UserDataOperator::getSNESx()
const {
1139 if (getFEMethod()->
snes_x == PETSC_NULLPTR)
1142 return getFEMethod()->snes_x;
1145Mat ForcesAndSourcesCore::UserDataOperator::getSNESA()
const {
1147 if (getFEMethod()->
snes_A == PETSC_NULLPTR)
1150 return getFEMethod()->snes_A;
1153Mat ForcesAndSourcesCore::UserDataOperator::getSNESB()
const {
1155 if (getFEMethod()->
snes_B == PETSC_NULLPTR)
1158 return getFEMethod()->snes_B;
1161Vec ForcesAndSourcesCore::UserDataOperator::getTSu()
const {
1163 if (getFEMethod()->
ts_u == PETSC_NULLPTR)
1166 return getFEMethod()->ts_u;
1169Vec ForcesAndSourcesCore::UserDataOperator::getTSu_t()
const {
1171 if (getFEMethod()->
ts_u_t == PETSC_NULLPTR)
1174 return getFEMethod()->ts_u_t;
1177Vec ForcesAndSourcesCore::UserDataOperator::getTSu_tt()
const {
1179 if (getFEMethod()->
ts_u_tt == PETSC_NULLPTR)
1182 return getFEMethod()->ts_u_tt;
1185Vec ForcesAndSourcesCore::UserDataOperator::getTSf()
const {
1187 if (getFEMethod()->
ts_F == PETSC_NULLPTR)
1190 return getFEMethod()->ts_F;
1193Mat ForcesAndSourcesCore::UserDataOperator::getTSA()
const {
1195 if (getFEMethod()->
ts_A == PETSC_NULLPTR)
1198 return getFEMethod()->ts_A;
1201Mat ForcesAndSourcesCore::UserDataOperator::getTSB()
const {
1203 if (getFEMethod()->
ts_B == PETSC_NULLPTR)
1206 return getFEMethod()->ts_B;
1209int ForcesAndSourcesCore::UserDataOperator::getTSstep()
const {
1211 if ((getFEMethod()->
data_ctx & PetscData::PetscData::CtxSetTime).none())
1214 return getFEMethod()->ts_step;
1217double ForcesAndSourcesCore::UserDataOperator::getTStime()
const {
1219 if ((getFEMethod()->
data_ctx & PetscData::PetscData::CtxSetTime).none())
1222 return getFEMethod()->ts_t;
1225double ForcesAndSourcesCore::UserDataOperator::getTStimeStep()
const {
1227 if ((getFEMethod()->
data_ctx & PetscData::PetscData::CtxSetTime).none())
1230 return getFEMethod()->ts_dt;
1233double ForcesAndSourcesCore::UserDataOperator::getTSa()
const {
1240 return getFEMethod()->ts_a;
1243double ForcesAndSourcesCore::UserDataOperator::getTSaa()
const {
1250 return getFEMethod()->ts_aa;
1257auto ForcesAndSourcesCore::UserDataOperator::getFTensor0IntegrationWeight() {
1259 &(getGaussPts()(getGaussPts().size1() - 1, 0)));
1273ForcesAndSourcesCore::UserDataOperator::getSidePtrFE()
const {
1278ForcesAndSourcesCore::UserDataOperator::getRefinePtrFE()
const {
1282MatrixDouble &ForcesAndSourcesCore::UserDataOperator::getCoordsAtGaussPts() {
1286auto ForcesAndSourcesCore::UserDataOperator::getFTensor1CoordsAtGaussPts() {
1288 &getCoordsAtGaussPts()(0, 0), &getCoordsAtGaussPts()(0, 1),
1289 &getCoordsAtGaussPts()(0, 2));
1292double ForcesAndSourcesCore::UserDataOperator::getMeasure()
const {
1296double &ForcesAndSourcesCore::UserDataOperator::getMeasure() {
1306template <
typename E>
1312 const int side_dim, boost::shared_ptr<Range> fe_range,
1314 boost::shared_ptr<AdjCache> adj_cache =
nullptr)
1316 sideFEName(fe_name), sideDim(side_dim), sevLevel(sev),
1317 adjCache(adj_cache), feRange(fe_range) {}
1331 boost::shared_ptr<AdjCache> adj_cache =
nullptr)
1332 :
OpLoopSide(m_field, fe_name, side_dim, nullptr, sev, adj_cache) {}
1336 return loopSide(sideFEName, sideFEPtr.get(), sideDim, 0, feRange,
VERBOSE,
1337 sevLevel, adjCache.get());
1341 return sideFEPtr->getOpPtrVector();
1360template <
typename E>
1366 boost::shared_ptr<Range> fe_range,
1369 rangeFEName(fe_name), sevLevel(sev), feRange(fe_range) {}
1373 return loopRange(rangeFEName, rangeFEPtr.get(), feRange,
VERBOSE, sevLevel);
1377 return rangeFEPtr->getOpPtrVector();
FieldApproximationBase
approximation base
FieldSpace
approximation spaces
@ LASTSPACE
FieldSpace in [ 0, LASTSPACE )
#define THROW_MESSAGE(msg)
Throw MoFEM exception.
multi_index_container< boost::shared_ptr< NumeredDofEntity >, indexed_by< ordered_unique< tag< Unique_mi_tag >, const_mem_fun< NumeredDofEntity::interface_type_DofEntity, UId, &NumeredDofEntity::getLocalUniqueId > >, ordered_non_unique< tag< Part_mi_tag >, member< NumeredDofEntity, unsigned int, &NumeredDofEntity::pArt > >, ordered_non_unique< tag< Idx_mi_tag >, member< NumeredDofEntity, DofIdx, &NumeredDofEntity::dofIdx > >, ordered_non_unique< tag< PetscGlobalIdx_mi_tag >, member< NumeredDofEntity, DofIdx, &NumeredDofEntity::petscGloablDofIdx > >, ordered_non_unique< tag< PetscLocalIdx_mi_tag >, member< NumeredDofEntity, DofIdx, &NumeredDofEntity::petscLocalDofIdx > >, ordered_non_unique< tag< Ent_mi_tag >, const_mem_fun< NumeredDofEntity::interface_type_DofEntity, EntityHandle, &NumeredDofEntity::getEnt > > > > NumeredDofEntity_multiIndex
MultiIndex container keeps NumeredDofEntity.
SeverityLevel
Severity levels.
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
UBlasVector< int > VectorInt
implementation of Data Operators for Forces and Sources
auto type_from_handle(const EntityHandle h)
get type from entity handle
ublas::vector< FieldEntity *, FieldEntAllocator > VectorFieldEntities
DEPRECATED typedef ForcesAndSourcesCore ForcesAndSurcesCore
auto dimension_from_handle(const EntityHandle h)
get entity dimension form handle
std::vector< boost::weak_ptr< FieldEntity > > FieldEntity_vector_view
ublas::vector< FEDofEntity *, DofsAllocator > VectorDofs
constexpr auto field_name
base operator to do operations at Gauss Pt. level
Deprecated interface functions.
Base face element used to integrate on skeleton.
Data on single entity (This is passed as argument to DataOperator::doWork)
data structure for finite element entity
std::array< boost::ptr_vector< EntData >, MBMAXTYPE > dataOnEntities
structure for User Loop Methods on finite elements
EntityHandle getFEEntityHandle() const
boost::shared_ptr< const NumeredEntFiniteElement > numeredEntFiniteElementPtr
Base face element used to integrate on skeleton.
Base face element used to integrate on skeleton.
void setOpType(const OpType type)
Set operator type.
EntityHandle getFEEntityHandle() const
Return finite element entity handle.
MoFEMErrorCode getProblemColIndices(const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const
Get col indices.
int getLoopSize() const
get size of elements in the loop
EntityType getFEType() const
Get dimension of finite element.
const KspMethod::KSPContext getKSPCtx() const
static const char *const OpTypeNames[]
MoFEMErrorCode loopSide(const string &fe_name, ForcesAndSourcesCore *side_fe, const size_t dim, const EntityHandle ent_for_side=0, boost::shared_ptr< Range > fe_range=nullptr, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy, AdjCache *adj_cache=nullptr)
User calls this function to loop over elements on the side of face. This function calls finite elemen...
MoFEMErrorCode loopRange(const string &fe_name, ForcesAndSourcesCore *range_fe, boost::shared_ptr< Range > fe_range, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
Iterate over range of elements.
int getNinTheLoop() const
get number of finite element in the loop
auto getFTensor1CoordsAtGaussPts()
Get coordinates at integration points assuming linear geometry.
int getNumberOfNodesOnElement() const
Get the number of nodes on finite element.
boost::weak_ptr< SideNumber > getSideNumberPtr(const int side_number, const EntityType type)
Get the side number pointer.
const SnesMethod::SNESContext getSNESCtx() const
MoFEMErrorCode loopParent(const string &fe_name, ForcesAndSourcesCore *parent_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
User calls this function to loop over parent elements. This function calls finite element with its op...
const PetscData::Switches & getDataCtx() const
ForcesAndSourcesCore * ptrFE
EntityHandle getSideEntity(const int side_number, const EntityType type)
Get the side entity.
MatrixDouble & getCoordsAtGaussPts()
Gauss points and weight, matrix (nb. of points x 3)
auto getFTensor0IntegrationWeight()
Get integration weights.
const TSMethod::TSContext getTSCtx() const
double getMeasure() const
get measure of element
std::string getFEName() const
Get name of the element.
ForcesAndSourcesCore * getRefinePtrFE() const
MoFEMErrorCode getProblemRowIndices(const std::string filed_name, const EntityType type, const int side, VectorInt &indices) const
Get row indices.
boost::shared_ptr< const NumeredEntFiniteElement > getNumeredEntFiniteElementPtr() const
Return raw pointer to NumeredEntFiniteElement.
std::map< EntityHandle, std::vector< boost::weak_ptr< NumeredEntFiniteElement > > > AdjCache
double getTStimeStep() const
void addOpType(const OpType type)
Add operator type.
ForcesAndSourcesCore * getPtrFE() const
int getOpType() const
Get operator types.
OpType
Controls loop over entities on element.
@ OPCOL
operator doWork function is executed on FE columns
@ OPROW
operator doWork function is executed on FE rows
@ OPROWCOL
operator doWork is executed on FE rows &columns
@ OPSPACE
operator do Work is execute on space data
MoFEMErrorCode loopChildren(const string &fe_name, ForcesAndSourcesCore *child_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
User calls this function to loop over parent elements. This function calls finite element with its op...
virtual MoFEMErrorCode setPtrFE(ForcesAndSourcesCore *ptr)
const FEMethod * getFEMethod() const
Return raw pointer to Finite Element Method object.
ForcesAndSourcesCore * getSidePtrFE() const
int getFEDim() const
Get dimension of finite element.
MatrixDouble & getGaussPts()
matrix of integration (Gauss) points for Volume Element
MoFEMErrorCode loopThis(const string &fe_name, ForcesAndSourcesCore *this_fe, const int verb=QUIET, const LogManager::SeverityLevel sev=Sev::noisy)
User calls this function to loop over the same element using a different set of integration points....
structure to get information form mofem into EntitiesFieldData
MoFEMErrorCode loopOverOperators()
Iterate user data operators.
MoFEMErrorCode getProblemNodesRowIndices(const std::string &field_name, VectorInt &nodes_indices) const
EntitiesFieldData & dataNoField
auto & getDataOnElementBySpaceArray()
Get data on entities and space.
MoFEMErrorCode getEntityIndices(EntitiesFieldData &data, const int bit_number, FieldEntity_vector_view &ents_field, const EntityType type_lo, const EntityType type_hi, EXTRACTOR &&extractor) const
MoFEMErrorCode getEntityRowIndices(EntitiesFieldData &data, const int bit_number, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const
MoFEMErrorCode getRowNodesIndices(EntitiesFieldData &data, const int bit_number) const
get row node indices from FENumeredDofEntity_multiIndex
int getMaxRowOrder() const
Get max order of approximation for field in rows.
auto & getUserPolynomialBase()
Get the User Polynomial Base object.
MoFEMErrorCode getEntitySense(EntitiesFieldData &data) const
Get the entity sense (orientation)
EntitiesFieldData & dataHdiv
MoFEMErrorCode getSpacesAndBaseOnEntities(EntitiesFieldData &data) const
Get field approximation space and base on entities.
MoFEMErrorCode getProblemTypeColIndices(const std::string &field_name, EntityType type, int side_number, VectorInt &indices) const
MoFEMErrorCode getNoFieldIndices(const int bit_number, boost::shared_ptr< FENumeredDofEntity_multiIndex > dofs, VectorInt &nodes_indices) const
get NoField indices
virtual MoFEMErrorCode operator()()
function is run for every finite element
MoFEMErrorCode getFaceNodes(EntitiesFieldData &data) const
Get nodes on faces.
const std::array< boost::shared_ptr< EntitiesFieldData >, LASTSPACE > derivedDataOnElement
Entity data on element entity columns fields.
MoFEMErrorCode getNoFieldRowIndices(EntitiesFieldData &data, const int bit_number) const
get col NoField indices
virtual MoFEMErrorCode setGaussPts(int order_row, int order_col, int order_data)
set user specific integration rule
MoFEMErrorCode getNodesIndices(const int bit_number, FieldEntity_vector_view &ents_field, VectorInt &nodes_indices, VectorInt &local_nodes_indices, EXTRACTOR &&extractor) const
get node indices
MoFEMErrorCode getEntityFieldData(EntitiesFieldData &data, const int bit_number, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const
EntitiesFieldData & dataHcurl
MoFEMErrorCode setRefineFEPtr(const ForcesAndSourcesCore *refine_fe_ptr)
Set the pointer to face element refined.
auto & getElementPolynomialBase()
Get the Entity Polynomial Base object.
ForcesAndSourcesCore * sidePtrFE
Element to integrate on the sides.
EntitiesFieldData & dataH1
MatrixDouble coordsAtGaussPts
coordinated at gauss points
boost::function< MoFEMErrorCode(ForcesAndSourcesCore *fe_raw_ptr, int order_row, int order_col, int order_data)> GaussHookFun
virtual int getRule(int order_row, int order_col, int order_data)
another variant of getRule
boost::ptr_deque< UserDataOperator > opPtrVector
Vector of finite element users data operators.
MoFEMErrorCode getEntitySense(const EntityType type, boost::ptr_vector< EntitiesFieldData::EntData > &data) const
get sense (orientation) of entity
const std::array< boost::shared_ptr< EntitiesFieldData >, LASTSPACE > dataOnElement
Entity data on element entity rows fields.
auto & getDerivedDataOnElementBySpaceArray()
Get derived data on entities and space.
MoFEMErrorCode getProblemNodesColIndices(const std::string &field_name, VectorInt &nodes_indices) const
MoFEMErrorCode calHierarchicalBaseFunctionsOnElement()
Calculate base functions.
MatrixDouble gaussPts
Matrix of integration points.
MoFEMErrorCode calBernsteinBezierBaseFunctionsOnElement()
Calculate Bernstein-Bezier base.
auto & getEntData(const FieldSpace space, const EntityType type, const int side)
Get the entity data.
MoFEMErrorCode getEntityDataOrder(EntitiesFieldData &data, const FieldSpace space) const
Get the entity data order for given space.
virtual MoFEMErrorCode preProcess()
function is run at the beginning of loop
MoFEMErrorCode getColNodesIndices(EntitiesFieldData &data, const int bit_number) const
get col node indices from FENumeredDofEntity_multiIndex
MoFEMErrorCode setSideFEPtr(const ForcesAndSourcesCore *side_fe_ptr)
Set the pointer to face element on the side.
int getMaxColOrder() const
Get max order of approximation for field in columns.
EntityType lastEvaluatedElementEntityType
Last evaluated type of element entity.
boost::function< int(int order_row, int order_col, int order_data)> RuleHookFun
MoFEMErrorCode getProblemNodesIndices(const std::string &field_name, const NumeredDofEntity_multiIndex &dofs, VectorInt &nodes_indices) const
get indices of nodal indices which are declared for problem but not this particular element
boost::ptr_deque< UserDataOperator > & getOpPtrVector()
Use to push back operator for row operator.
GaussHookFun setRuleHook
Set function to calculate integration rule.
MoFEMErrorCode getBitRefLevelOnData()
MoFEMErrorCode getNodesFieldData(EntitiesFieldData &data, const int bit_number) const
Get data on nodes.
MoFEMErrorCode getEntityColIndices(EntitiesFieldData &data, const int bit_number, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const
boost::shared_ptr< BaseFunction > elementPolynomialBasePtr
Pointer to entity polynomial base.
MoFEMErrorCode getEntityDataOrder(const EntityType type, const FieldSpace space, boost::ptr_vector< EntitiesFieldData::EntData > &data) const
Get the entity data order.
ForcesAndSourcesCore * refinePtrFE
Element to integrate parent or child.
MoFEMErrorCode getNoFieldColIndices(EntitiesFieldData &data, const int bit_number) const
get col NoField indices
int getMaxDataOrder() const
Get max order of approximation for data fields.
MoFEMErrorCode getNoFieldFieldData(const int bit_number, VectorDouble &ent_field_data, VectorDofs &ent_field_dofs, VectorFieldEntities &ent_field) const
Get field data on nodes.
boost::shared_ptr< BaseFunction > userPolynomialBasePtr
Pointer to user polynomial base.
MoFEMErrorCode getProblemTypeRowIndices(const std::string &field_name, EntityType type, int side_number, VectorInt &indices) const
MoFEMErrorCode getProblemTypeIndices(const std::string &field_name, const NumeredDofEntity_multiIndex &dofs, EntityType type, int side_number, VectorInt &indices) const
get indices by type (generic function) which are declared for problem but not this particular element
RuleHookFun getRuleHook
Hook to get rule.
MoFEMErrorCode createDataOnElement(EntityType type)
Create a entity data on element object.
virtual MoFEMErrorCode postProcess()
function is run at the end of loop
EntitiesFieldData & dataL2
KSPContext
pass information about context of KSP/DM for with finite element is computed
Copy geometry-related data from one element to other.
Iterate over range of (sub)elements.
OpLoopRange(MoFEM::Interface &m_field, const std::string fe_name, boost::shared_ptr< Range > fe_range, const LogManager::SeverityLevel sev=Sev::noisy)
boost::shared_ptr< E > & getRangeFEPtr()
boost::ptr_deque< UserDataOperator > & getOpPtrVector()
const std::string rangeFEName
const LogManager::SeverityLevel sevLevel
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< Range > feRange
boost::shared_ptr< E > rangeFEPtr
Element used to execute operators on side of the element.
MoFEMErrorCode doWork(int side, EntityType type, EntitiesFieldData::EntData &data)
Operator for linear form, usually to calculate values on right hand side.
boost::shared_ptr< Range > feRange
boost::shared_ptr< E > & getSideFEPtr()
const std::string sideFEName
boost::shared_ptr< AdjCache > adjCache
boost::shared_ptr< E > sideFEPtr
OpLoopSide(MoFEM::Interface &m_field, const std::string fe_name, const int side_dim, boost::shared_ptr< Range > fe_range, const LogManager::SeverityLevel sev=Sev::noisy, boost::shared_ptr< AdjCache > adj_cache=nullptr)
boost::ptr_deque< UserDataOperator > & getOpPtrVector()
const LogManager::SeverityLevel sevLevel
OpLoopSide(MoFEM::Interface &m_field, const std::string fe_name, const int side_dim, const LogManager::SeverityLevel sev=Sev::noisy, boost::shared_ptr< AdjCache > adj_cache=nullptr)
Construct a new Op Loop Side object.
static constexpr Switches CtxSetA
static constexpr Switches CtxSetX_TT
std::bitset< 8 > Switches
static constexpr Switches CtxSetX_T
static constexpr Switches CtxSetB
Mat & snes_B
preconditioner of jacobian matrix
Mat & snes_A
jacobian matrix
Vec & ts_F
residual vector
Vec & ts_u_tt
second time derivative of state vector
Vec & ts_u_t
time derivative of state vector
Mat & ts_B
Preconditioner for ts_A.
Base volume element used to integrate on skeleton.