62#ifndef __FORCES_AND_SOURCES_CORE__HPP__
63#define __FORCES_AND_SOURCES_CORE__HPP__
65using namespace boost::numeric;
78 typedef boost::function<int(
int order_row,
int order_col,
int order_data)>
82 int order_row,
int order_col,
228 const EntityType type,
229 boost::ptr_vector<EntitiesFieldData::EntData> &data)
const;
240 const EntityType type,
const FieldSpace space,
241 boost::ptr_vector<EntitiesFieldData::EntData> &data)
const;
250 template <EntityType type>
263 template <EntityType type>
274 template <
typename EXTRACTOR>
278 VectorInt &local_nodes_indices, EXTRACTOR &&extractor)
const;
282 const int bit_number)
const;
286 const int bit_number)
const;
288 template <
typename EXTRACTOR>
291 const EntityType type_lo,
292 const EntityType type_hi,
293 EXTRACTOR &&extractor)
const;
297 const EntityType type_lo = MBVERTEX,
298 const EntityType type_hi = MBPOLYHEDRON)
const;
302 const EntityType type_lo = MBVERTEX,
303 const EntityType type_hi = MBPOLYHEDRON)
const;
308 const int bit_number)
const;
312 const int bit_number)
const;
331 const int bit_number)
const;
335 const EntityType type_lo = MBVERTEX,
336 const EntityType type_hi = MBPOLYHEDRON)
const;
346 template <
typename EXTRACTOR>
348 const int bit_number,
349 EXTRACTOR &&extractor)
const;
374 EntityType type,
int side_number,
380 EntityType type,
int side_number,
385 EntityType type,
int side_number,
427 virtual int getRule(
int order_row,
int order_col,
int order_data);
508 const std::array<boost::shared_ptr<EntitiesFieldData>,
LASTSPACE>
515 const std::array<boost::shared_ptr<EntitiesFieldData>,
LASTSPACE>
644 const bool symm =
true);
664 const bool symm =
true);
683 const std::string col_field_name,
const char type,
684 const bool symm =
true);
688 inline boost::shared_ptr<const NumeredEntFiniteElement>
723 const EntityType type);
758 const EntityType type);
782 const EntityType type,
const int side,
800 const EntityType type,
const int side,
882 inline Vec
getTSu()
const;
888 inline Vec
getTSf()
const;
890 inline Mat
getTSA()
const;
892 inline Mat
getTSB()
const;
900 inline double getTSa()
const;
996 std::vector<boost::weak_ptr<NumeredEntFiniteElement>>>;
1015 boost::shared_ptr<Range> fe_range =
nullptr,
1016 const int verb =
QUIET,
1035 const int verb =
QUIET,
1050 const int verb =
QUIET,
1065 const int verb =
QUIET,
1080 boost::shared_ptr<Range> fe_range,
1081 const int verb =
QUIET,
1108boost::shared_ptr<const NumeredEntFiniteElement>
1109ForcesAndSourcesCore::UserDataOperator::getNumeredEntFiniteElementPtr()
const {
1113EntityHandle ForcesAndSourcesCore::UserDataOperator::getFEEntityHandle()
const {
1114 return getNumeredEntFiniteElementPtr()->getEnt();
1117int ForcesAndSourcesCore::UserDataOperator::getFEDim()
const {
1121EntityType ForcesAndSourcesCore::UserDataOperator::getFEType()
const {
1125boost::weak_ptr<SideNumber>
1126ForcesAndSourcesCore::UserDataOperator::getSideNumberPtr(
1127 const int side_number,
const EntityType type) {
1128 auto &side_table_by_side_and_type =
1129 ptrFE->numeredEntFiniteElementPtr->getSideNumberTable().get<1>();
1131 side_table_by_side_and_type.find(boost::make_tuple(type, side_number));
1132 if (side_it != side_table_by_side_and_type.end())
1135 return boost::weak_ptr<SideNumber>();
1139ForcesAndSourcesCore::UserDataOperator::getSideEntity(
const int side_number,
1140 const EntityType type) {
1141 if (
auto side_ptr = getSideNumberPtr(side_number, type).lock())
1142 return side_ptr->ent;
1147int ForcesAndSourcesCore::UserDataOperator::getNumberOfNodesOnElement()
const {
1148 return ptrFE->getNumberOfNodes();
1151const FEMethod *ForcesAndSourcesCore::UserDataOperator::getFEMethod()
const {
1155int ForcesAndSourcesCore::UserDataOperator::getOpType()
const {
return opType; }
1157void ForcesAndSourcesCore::UserDataOperator::setOpType(
const OpType type) {
1161void ForcesAndSourcesCore::UserDataOperator::addOpType(
const OpType type) {
1165int ForcesAndSourcesCore::UserDataOperator::getNinTheLoop()
const {
1166 return getFEMethod()->getNinTheLoop();
1169int ForcesAndSourcesCore::UserDataOperator::getLoopSize()
const {
1170 return getFEMethod()->getLoopSize();
1173std::string ForcesAndSourcesCore::UserDataOperator::getFEName()
const {
1174 return getFEMethod()->getFEName();
1178ForcesAndSourcesCore::UserDataOperator::getDataCtx()
const {
1179 return getFEMethod()->data_ctx;
1183ForcesAndSourcesCore::UserDataOperator::getKSPCtx()
const {
1184 return getFEMethod()->ksp_ctx;
1188ForcesAndSourcesCore::UserDataOperator::getSNESCtx()
const {
1189 return getFEMethod()->snes_ctx;
1193ForcesAndSourcesCore::UserDataOperator::getTSCtx()
const {
1194 return getFEMethod()->ts_ctx;
1197Vec ForcesAndSourcesCore::UserDataOperator::getKSPf()
const {
1199 if (getFEMethod()->
ksp_f == PETSC_NULLPTR)
1202 return getFEMethod()->ksp_f;
1205Mat ForcesAndSourcesCore::UserDataOperator::getKSPA()
const {
1207 if (getFEMethod()->
ksp_A == PETSC_NULLPTR)
1210 return getFEMethod()->ksp_A;
1213Mat ForcesAndSourcesCore::UserDataOperator::getKSPB()
const {
1215 if (getFEMethod()->
ksp_B == PETSC_NULLPTR)
1218 return getFEMethod()->ksp_B;
1221Vec ForcesAndSourcesCore::UserDataOperator::getSNESf()
const {
1223 if (getFEMethod()->
snes_f == PETSC_NULLPTR)
1226 return getFEMethod()->snes_f;
1229Vec ForcesAndSourcesCore::UserDataOperator::getSNESx()
const {
1231 if (getFEMethod()->
snes_x == PETSC_NULLPTR)
1234 return getFEMethod()->snes_x;
1237Mat ForcesAndSourcesCore::UserDataOperator::getSNESA()
const {
1239 if (getFEMethod()->
snes_A == PETSC_NULLPTR)
1242 return getFEMethod()->snes_A;
1245Mat ForcesAndSourcesCore::UserDataOperator::getSNESB()
const {
1247 if (getFEMethod()->
snes_B == PETSC_NULLPTR)
1250 return getFEMethod()->snes_B;
1253Vec ForcesAndSourcesCore::UserDataOperator::getTSu()
const {
1255 if (getFEMethod()->
ts_u == PETSC_NULLPTR)
1258 return getFEMethod()->ts_u;
1261Vec ForcesAndSourcesCore::UserDataOperator::getTSu_t()
const {
1263 if (getFEMethod()->
ts_u_t == PETSC_NULLPTR)
1266 return getFEMethod()->ts_u_t;
1269Vec ForcesAndSourcesCore::UserDataOperator::getTSu_tt()
const {
1271 if (getFEMethod()->
ts_u_tt == PETSC_NULLPTR)
1274 return getFEMethod()->ts_u_tt;
1277Vec ForcesAndSourcesCore::UserDataOperator::getTSf()
const {
1279 if (getFEMethod()->
ts_F == PETSC_NULLPTR)
1282 return getFEMethod()->ts_F;
1285Mat ForcesAndSourcesCore::UserDataOperator::getTSA()
const {
1287 if (getFEMethod()->
ts_A == PETSC_NULLPTR)
1290 return getFEMethod()->ts_A;
1293Mat ForcesAndSourcesCore::UserDataOperator::getTSB()
const {
1295 if (getFEMethod()->
ts_B == PETSC_NULLPTR)
1298 return getFEMethod()->ts_B;
1301int ForcesAndSourcesCore::UserDataOperator::getTSstep()
const {
1303 if ((getFEMethod()->
data_ctx & PetscData::PetscData::CtxSetTime).none())
1306 return getFEMethod()->ts_step;
1309double ForcesAndSourcesCore::UserDataOperator::getTStime()
const {
1311 if ((getFEMethod()->
data_ctx & PetscData::PetscData::CtxSetTime).none())
1314 return getFEMethod()->ts_t;
1317double ForcesAndSourcesCore::UserDataOperator::getTStimeStep()
const {
1319 if ((getFEMethod()->
data_ctx & PetscData::PetscData::CtxSetTime).none())
1322 return getFEMethod()->ts_dt;
1325double ForcesAndSourcesCore::UserDataOperator::getTSa()
const {
1332 return getFEMethod()->ts_a;
1335double ForcesAndSourcesCore::UserDataOperator::getTSaa()
const {
1342 return getFEMethod()->ts_aa;
1349auto ForcesAndSourcesCore::UserDataOperator::getFTensor0IntegrationWeight() {
1351 &(getGaussPts()(getGaussPts().size1() - 1, 0)));
1365ForcesAndSourcesCore::UserDataOperator::getSidePtrFE()
const {
1370ForcesAndSourcesCore::UserDataOperator::getRefinePtrFE()
const {
1374MatrixDouble &ForcesAndSourcesCore::UserDataOperator::getCoordsAtGaussPts() {
1378auto ForcesAndSourcesCore::UserDataOperator::getFTensor1CoordsAtGaussPts() {
1380 &getCoordsAtGaussPts()(0, 0), &getCoordsAtGaussPts()(0, 1),
1381 &getCoordsAtGaussPts()(0, 2));
1384double ForcesAndSourcesCore::UserDataOperator::getMeasure()
const {
1388double &ForcesAndSourcesCore::UserDataOperator::getMeasure() {
1398template <
typename E>
1404 const int side_dim, boost::shared_ptr<Range> fe_range,
1406 boost::shared_ptr<AdjCache> adj_cache =
nullptr)
1408 sideFEName(fe_name), sideDim(side_dim), sevLevel(sev),
1409 adjCache(adj_cache), feRange(fe_range) {}
1423 boost::shared_ptr<AdjCache> adj_cache =
nullptr)
1424 :
OpLoopSide(m_field, fe_name, side_dim, nullptr, sev, adj_cache) {}
1428 return loopSide(sideFEName, sideFEPtr.get(), sideDim, 0, feRange,
VERBOSE,
1429 sevLevel, adjCache.get());
1433 return sideFEPtr->getOpPtrVector();
1452template <
typename E>
1458 boost::shared_ptr<Range> fe_range,
1461 rangeFEName(fe_name), sevLevel(sev), feRange(fe_range) {}
1465 return loopRange(rangeFEName, rangeFEPtr.get(), feRange,
VERBOSE, sevLevel);
1469 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
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
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
Get the entity handle of the current finite element.
boost::shared_ptr< const NumeredEntFiniteElement > numeredEntFiniteElementPtr
Shared pointer to finite element database structure.
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 from 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
virtual MoFEMErrorCode operator()()
Main operator function executed for each loop iteration.
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 getNoFieldEntityFieldData(EntitiesFieldData &data, const int bit_number, EXTRACTOR &&extractor) const
Get field data on entities where no field is defined.
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()
Pre-processing function executed at loop initialization.
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.
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()
Post-processing function executed at loop completion.
EntitiesFieldData & dataL2
Mat & ksp_B
Reference to preconditioner matrix in KSP context.
KSPContext
Context enumeration for KSP solver phases.
Mat & ksp_A
Reference to system matrix in KSP context.
Vec & ksp_f
Reference to residual vector in KSP context.
Operator for broken loop side.
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
Jacobian matrix switch.
static constexpr Switches CtxSetX_TT
Second time derivative switch.
std::bitset< 8 > Switches
Bitset type for context switches.
Switches data_ctx
Current data context switches.
static constexpr Switches CtxSetX_T
First time derivative switch.
static constexpr Switches CtxSetB
Preconditioner matrix switch.
SNESContext
Context enumeration for SNES solver phases.
Vec & snes_f
Reference to residual vector.
Vec & snes_x
Reference to current solution state vector.
Mat & snes_B
Reference to preconditioner of Jacobian matrix.
Mat & snes_A
Reference to Jacobian matrix.
TSContext
Context enumeration for TS solver phases.
Mat & ts_A
Reference to Jacobian matrix: dF/dU + a*dF/dU_t + aa*dF/dU_tt.
Vec & ts_F
Reference to residual vector F(t,U,U_t,U_tt)
Vec & ts_u_tt
Reference to second time derivative of state vector d²U/dt²
Vec & ts_u_t
Reference to first time derivative of state vector dU/dt.
Vec & ts_u
Reference to current state vector U(t)
Mat & ts_B
Reference to preconditioner matrix for ts_A.
Base volume element used to integrate on skeleton.