|
| v0.14.0
|
ContactPrism finite element.
More...
#include <src/finite_elements/ContactPrismElementForcesAndSourcesCore.hpp>
|
| ContactPrismElementForcesAndSourcesCore (Interface &m_field) |
|
MoFEMErrorCode | operator() () |
| function is run for every finite element More...
|
|
const std::array< boost::shared_ptr< EntitiesFieldData >, LASTSPACE > | getDataOnMasterFromEleSide () |
|
const std::array< boost::shared_ptr< EntitiesFieldData >, LASTSPACE > | getDataOnSlaveFromEleSide () |
|
MatrixDouble & | getGaussPtsMasterFromEleSide () |
|
MatrixDouble & | getGaussPtsSlaveFromEleSide () |
|
Public Member Functions inherited from MoFEM::ForcesAndSourcesCore |
| ForcesAndSourcesCore (Interface &m_field) |
|
boost::ptr_deque< UserDataOperator > & | getOpPtrVector () |
| Use to push back operator for row operator. More...
|
|
auto & | getElementPolynomialBase () |
| Get the Entity Polynomial Base object. More...
|
|
auto & | getUserPolynomialBase () |
| Get the User Polynomial Base object. More...
|
|
virtual MoFEMErrorCode | preProcess () |
| function is run at the beginning of loop More...
|
|
virtual MoFEMErrorCode | postProcess () |
| function is run at the end of loop More...
|
|
int | getMaxDataOrder () const |
| Get max order of approximation for data fields. More...
|
|
int | getMaxRowOrder () const |
| Get max order of approximation for field in rows. More...
|
|
int | getMaxColOrder () const |
| Get max order of approximation for field in columns. More...
|
|
auto & | getEntData (const FieldSpace space, const EntityType type, const int side) |
| Get the entity data. More...
|
|
auto & | getDataOnElementBySpaceArray () |
| Get data on entities and space. More...
|
|
auto & | getDerivedDataOnElementBySpaceArray () |
| Get derived data on entities and space. More...
|
|
MoFEMErrorCode | query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const |
|
| FEMethod ()=default |
|
auto | getFEName () const |
| get finite element name More...
|
|
auto | getDataDofsPtr () const |
|
auto | getDataVectorDofsPtr () const |
|
const FieldEntity_vector_view & | getDataFieldEnts () const |
|
boost::shared_ptr< FieldEntity_vector_view > & | getDataFieldEntsPtr () const |
|
auto & | getRowFieldEnts () const |
|
auto & | getRowFieldEntsPtr () const |
|
auto & | getColFieldEnts () const |
|
auto & | getColFieldEntsPtr () const |
|
auto | getRowDofsPtr () const |
|
auto | getColDofsPtr () const |
|
auto | getNumberOfNodes () const |
|
EntityHandle | getFEEntityHandle () const |
|
MoFEMErrorCode | getNodeData (const std::string field_name, VectorDouble &data, const bool reset_dofs=true) |
|
| BasicMethod () |
|
virtual | ~BasicMethod ()=default |
|
int | getNinTheLoop () const |
| get number of evaluated element in the loop More...
|
|
int | getLoopSize () const |
| get loop size More...
|
|
auto | getLoHiFERank () const |
| Get lo and hi processor rank of iterated entities. More...
|
|
auto | getLoFERank () const |
| Get upper rank in loop for iterating elements. More...
|
|
auto | getHiFERank () const |
| Get upper rank in loop for iterating elements. More...
|
|
unsigned int | getFieldBitNumber (std::string field_name) const |
|
MoFEMErrorCode | copyBasicMethod (const BasicMethod &basic) |
| Copy data from other base method to this base method. More...
|
|
boost::weak_ptr< CacheTuple > | getCacheWeakPtr () const |
| Get the cache weak ptr object. More...
|
|
| KspMethod () |
|
virtual | ~KspMethod ()=default |
|
MoFEMErrorCode | copyKsp (const KspMethod &ksp) |
| copy data form another method More...
|
|
| PetscData () |
|
virtual | ~PetscData ()=default |
|
MoFEMErrorCode | copyPetscData (const PetscData &petsc_data) |
|
template<class IFACE > |
MoFEMErrorCode | registerInterface (bool error_if_registration_failed=true) |
| Register interface. More...
|
|
template<class IFACE > |
MoFEMErrorCode | getInterface (IFACE *&iface) const |
| Get interface reference to pointer of interface. More...
|
|
template<class IFACE > |
MoFEMErrorCode | getInterface (IFACE **const iface) const |
| Get interface pointer to pointer of interface. More...
|
|
template<class IFACE , typename boost::enable_if< boost::is_pointer< IFACE >, int >::type = 0> |
IFACE | getInterface () const |
| Get interface pointer to pointer of interface. More...
|
|
template<class IFACE , typename boost::enable_if< boost::is_reference< IFACE >, int >::type = 0> |
IFACE | getInterface () const |
| Get reference to interface. More...
|
|
template<class IFACE > |
IFACE * | getInterface () const |
| Function returning pointer to interface. More...
|
|
virtual | ~UnknownInterface ()=default |
|
| SnesMethod () |
|
virtual | ~SnesMethod ()=default |
|
MoFEMErrorCode | copySnes (const SnesMethod &snes) |
| Copy snes data. More...
|
|
| TSMethod () |
|
virtual | ~TSMethod ()=default |
|
MoFEMErrorCode | copyTs (const TSMethod &ts) |
| Copy TS solver data. More...
|
|
|
MoFEMErrorCode | setDefaultGaussPts (const int rule) |
|
MoFEMErrorCode | loopOverOperators () |
| Iterate user data operators. More...
|
|
MoFEMErrorCode | getValueHdivDemkowiczBase (MatrixDouble &pts, FieldApproximationBase m_s_base, EntitiesFieldData &m_s_data) |
| Iterate user data operators. More...
|
|
MoFEMErrorCode | getEntityFieldData (EntitiesFieldData &master_data, EntitiesFieldData &slave_data, const std::string &field_name, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const |
| function that gets entity field data. More...
|
|
template<typename EXTRACTOR > |
MoFEMErrorCode | getEntityIndices (EntitiesFieldData &master_data, EntitiesFieldData &slave_data, const std::string &field_name, FieldEntity_vector_view &ents_field, const EntityType type_lo, const EntityType type_hi, EXTRACTOR &&extractor) const |
| function that gets entity indices. More...
|
|
template<typename EXTRACTOR > |
MoFEMErrorCode | getNodesIndices (const std::string field_name, FieldEntity_vector_view &ents_field, VectorInt &master_nodes_indices, VectorInt &master_local_nodes_indices, VectorInt &slave_nodes_indices, VectorInt &slave_local_nodes_indices, EXTRACTOR &&extractor) const |
| function that gets nodes indices. More...
|
|
MoFEMErrorCode | getNodesFieldData (const std::string field_name, VectorDouble &master_nodes_data, VectorDouble &slave_nodes_data, VectorDofs &master_nodes_dofs, VectorDofs &slave_nodes_dofs, VectorFieldEntities &master_field_entities, VectorFieldEntities &slave_field_entities, FieldSpace &master_space, FieldSpace &slave_space, FieldApproximationBase &master_base, FieldApproximationBase &slave_base) const |
| function that gets nodes field data. More...
|
|
Protected Member Functions inherited from MoFEM::ForcesAndSourcesCore |
MoFEMErrorCode | getEntitySense (const EntityType type, boost::ptr_vector< EntitiesFieldData::EntData > &data) const |
| get sense (orientation) of entity More...
|
|
MoFEMErrorCode | getEntityDataOrder (const EntityType type, const FieldSpace space, boost::ptr_vector< EntitiesFieldData::EntData > &data) const |
| Get the entity data order. More...
|
|
template<EntityType type> |
MoFEMErrorCode | getEntitySense (EntitiesFieldData &data) const |
| Get the entity sense (orientation) More...
|
|
template<EntityType type> |
MoFEMErrorCode | getEntityDataOrder (EntitiesFieldData &data, const FieldSpace space) const |
| Get the entity data order for given space. More...
|
|
MoFEMErrorCode | getFaceNodes (EntitiesFieldData &data) const |
| Get nodes on faces. More...
|
|
MoFEMErrorCode | getSpacesAndBaseOnEntities (EntitiesFieldData &data) const |
| Get field approximation space and base on entities. More...
|
|
virtual int | getRule (int order_row, int order_col, int order_data) |
| another variant of getRule More...
|
|
virtual MoFEMErrorCode | setGaussPts (int order_row, int order_col, int order_data) |
| set user specific integration rule More...
|
|
MoFEMErrorCode | calHierarchicalBaseFunctionsOnElement (const FieldApproximationBase b) |
| Calculate base functions. More...
|
|
MoFEMErrorCode | calHierarchicalBaseFunctionsOnElement () |
| Calculate base functions. More...
|
|
MoFEMErrorCode | calBernsteinBezierBaseFunctionsOnElement () |
| Calculate Bernstein-Bezier base. More...
|
|
MoFEMErrorCode | createDataOnElement (EntityType type) |
| Create a entity data on element object. More...
|
|
MoFEMErrorCode | loopOverOperators () |
| Iterate user data operators. More...
|
|
template<typename EXTRACTOR > |
MoFEMErrorCode | getNodesIndices (const int bit_number, FieldEntity_vector_view &ents_field, VectorInt &nodes_indices, VectorInt &local_nodes_indices, EXTRACTOR &&extractor) const |
| get node indices More...
|
|
MoFEMErrorCode | getRowNodesIndices (EntitiesFieldData &data, const int bit_number) const |
| get row node indices from FENumeredDofEntity_multiIndex More...
|
|
MoFEMErrorCode | getColNodesIndices (EntitiesFieldData &data, const int bit_number) const |
| get col node indices from FENumeredDofEntity_multiIndex More...
|
|
template<typename EXTRACTOR > |
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 | getEntityColIndices (EntitiesFieldData &data, const int bit_number, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const |
|
MoFEMErrorCode | getNoFieldIndices (const int bit_number, boost::shared_ptr< FENumeredDofEntity_multiIndex > dofs, VectorInt &nodes_indices) const |
| get NoField indices More...
|
|
MoFEMErrorCode | getNoFieldRowIndices (EntitiesFieldData &data, const int bit_number) const |
| get col NoField indices More...
|
|
MoFEMErrorCode | getNoFieldColIndices (EntitiesFieldData &data, const int bit_number) const |
| get col NoField indices More...
|
|
MoFEMErrorCode | getBitRefLevelOnData () |
|
MoFEMErrorCode | getNoFieldFieldData (const int bit_number, VectorDouble &ent_field_data, VectorDofs &ent_field_dofs, VectorFieldEntities &ent_field) const |
| Get field data on nodes. More...
|
|
MoFEMErrorCode | getNoFieldFieldData (EntitiesFieldData &data, const int bit_number) const |
|
MoFEMErrorCode | getNodesFieldData (EntitiesFieldData &data, const int bit_number) const |
| Get data on nodes. More...
|
|
MoFEMErrorCode | getEntityFieldData (EntitiesFieldData &data, const int bit_number, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const |
|
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 More...
|
|
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 More...
|
|
MoFEMErrorCode | getProblemNodesRowIndices (const std::string &field_name, VectorInt &nodes_indices) const |
|
MoFEMErrorCode | getProblemTypeRowIndices (const std::string &field_name, EntityType type, int side_number, VectorInt &indices) const |
|
MoFEMErrorCode | getProblemNodesColIndices (const std::string &field_name, VectorInt &nodes_indices) const |
|
MoFEMErrorCode | getProblemTypeColIndices (const std::string &field_name, EntityType type, int side_number, VectorInt &indices) const |
|
virtual int | getRule (int order) |
|
virtual MoFEMErrorCode | setGaussPts (int order) |
|
|
Public Types inherited from MoFEM::ForcesAndSourcesCore |
typedef boost::function< int(int order_row, int order_col, int order_data)> | RuleHookFun |
|
typedef boost::function< MoFEMErrorCode(ForcesAndSourcesCore *fe_raw_ptr, int order_row, int order_col, int order_data)> | GaussHookFun |
|
enum | KSPContext { CTX_SETFUNCTION,
CTX_OPERATORS,
CTX_KSPNONE
} |
| pass information about context of KSP/DM for with finite element is computed More...
|
|
enum | DataContext {
CTX_SET_NONE = 0,
CTX_SET_F = 1 << 0,
CTX_SET_A = 1 << 1,
CTX_SET_B = 1 << 2,
CTX_SET_X = 1 << 3,
CTX_SET_X_T = 1 << 4,
CTX_SET_X_TT = 1 << 6,
CTX_SET_TIME = 1 << 7
} |
|
using | Switches = std::bitset< 8 > |
|
enum | SNESContext { CTX_SNESSETFUNCTION,
CTX_SNESSETJACOBIAN,
CTX_SNESNONE
} |
|
enum | TSContext {
CTX_TSSETRHSFUNCTION,
CTX_TSSETRHSJACOBIAN,
CTX_TSSETIFUNCTION,
CTX_TSSETIJACOBIAN,
CTX_TSTSMONITORSET,
CTX_TSNONE
} |
|
static MoFEMErrorCode | getLibVersion (Version &version) |
| Get library version. More...
|
|
static MoFEMErrorCode | getFileVersion (moab::Interface &moab, Version &version) |
| Get database major version. More...
|
|
static MoFEMErrorCode | setFileVersion (moab::Interface &moab, Version version=Version(MoFEM_VERSION_MAJOR, MoFEM_VERSION_MINOR, MoFEM_VERSION_BUILD)) |
| Get database major version. More...
|
|
static MoFEMErrorCode | getInterfaceVersion (Version &version) |
| Get database major version. More...
|
|
Public Attributes inherited from MoFEM::ForcesAndSourcesCore |
Interface & | mField |
|
RuleHookFun | getRuleHook |
| Hook to get rule. More...
|
|
GaussHookFun | setRuleHook |
| Set function to calculate integration rule. More...
|
|
MatrixDouble | gaussPts |
| Matrix of integration points. More...
|
|
std::string | feName |
| Name of finite element. More...
|
|
boost::shared_ptr< const NumeredEntFiniteElement > | numeredEntFiniteElementPtr |
|
boost::function< bool(FEMethod *fe_method_ptr)> | exeTestHook |
| Tet if element to skip element. More...
|
|
int | nInTheLoop |
| number currently of processed method More...
|
|
int | loopSize |
| local number oe methods to process More...
|
|
std::pair< int, int > | loHiFERank |
| Llo and hi processor rank of iterated entities. More...
|
|
int | rAnk |
| processor rank More...
|
|
int | sIze |
| number of processors in communicator More...
|
|
const RefEntity_multiIndex * | refinedEntitiesPtr |
| container of mofem dof entities More...
|
|
const RefElement_multiIndex * | refinedFiniteElementsPtr |
| container of mofem finite element entities More...
|
|
const Problem * | problemPtr |
| raw pointer to problem More...
|
|
const Field_multiIndex * | fieldsPtr |
| raw pointer to fields container More...
|
|
const FieldEntity_multiIndex * | entitiesPtr |
| raw pointer to container of field entities More...
|
|
const DofEntity_multiIndex * | dofsPtr |
| raw pointer container of dofs More...
|
|
const FiniteElement_multiIndex * | finiteElementsPtr |
| raw pointer to container finite elements More...
|
|
const EntFiniteElement_multiIndex * | finiteElementsEntitiesPtr |
|
const FieldEntityEntFiniteElementAdjacencyMap_multiIndex * | adjacenciesPtr |
|
boost::function< MoFEMErrorCode()> | preProcessHook |
| Hook function for pre-processing. More...
|
|
boost::function< MoFEMErrorCode()> | postProcessHook |
| Hook function for post-processing. More...
|
|
boost::function< MoFEMErrorCode()> | operatorHook |
| Hook function for operator. More...
|
|
boost::movelib::unique_ptr< bool > | vecAssembleSwitch |
|
boost::movelib::unique_ptr< bool > | matAssembleSwitch |
|
boost::weak_ptr< CacheTuple > | cacheWeakPtr |
|
KSPContext | ksp_ctx |
| Context. More...
|
|
KSP | ksp |
| KSP solver. More...
|
|
Vec & | ksp_f |
|
Mat & | ksp_A |
|
Mat & | ksp_B |
|
Switches | data_ctx |
|
Vec | f |
|
Mat | A |
|
Mat | B |
|
Vec | x |
|
Vec | x_t |
|
Vec | x_tt |
|
SNESContext | snes_ctx |
|
SNES | snes |
| snes solver More...
|
|
Vec & | snes_x |
| state vector More...
|
|
Vec & | snes_f |
| residual More...
|
|
Mat & | snes_A |
| jacobian matrix More...
|
|
Mat & | snes_B |
| preconditioner of jacobian matrix More...
|
|
TS | ts |
| time solver More...
|
|
TSContext | ts_ctx |
|
PetscInt | ts_step |
| time step number More...
|
|
PetscReal | ts_a |
| shift for U_t (see PETSc Time Solver) More...
|
|
PetscReal | ts_aa |
| shift for U_tt shift for U_tt More...
|
|
PetscReal | ts_t |
| time More...
|
|
PetscReal | ts_dt |
| time step size More...
|
|
Vec & | ts_u |
| state vector More...
|
|
Vec & | ts_u_t |
| time derivative of state vector More...
|
|
Vec & | ts_u_tt |
| second time derivative of state vector More...
|
|
Vec & | ts_F |
| residual vector More...
|
|
Mat & | ts_A |
|
Mat & | ts_B |
| Preconditioner for ts_A. More...
|
|
static constexpr Switches | CtxSetNone = PetscData::Switches(CTX_SET_NONE) |
|
static constexpr Switches | CtxSetF = PetscData::Switches(CTX_SET_F) |
|
static constexpr Switches | CtxSetA = PetscData::Switches(CTX_SET_A) |
|
static constexpr Switches | CtxSetB = PetscData::Switches(CTX_SET_B) |
|
static constexpr Switches | CtxSetX = PetscData::Switches(CTX_SET_X) |
|
static constexpr Switches | CtxSetX_T = PetscData::Switches(CTX_SET_X_T) |
|
static constexpr Switches | CtxSetX_TT = PetscData::Switches(CTX_SET_X_TT) |
|
static constexpr Switches | CtxSetTime = PetscData::Switches(CTX_SET_TIME) |
|
ContactPrism finite element.
User is implementing own operator at Gauss points level, by own class derived from ContactPrismElementForcesAndSourcesCoreL::UserDataOperator. Arbitrary number of operator added pushing instances to rowOpPtrVector and rowColOpPtrVector.
- Examples
- continuity_check_on_contact_prism_side_ele.cpp.
Definition at line 27 of file ContactPrismElementForcesAndSourcesCore.hpp.
◆ ContactPrismElementForcesAndSourcesCore()
MoFEM::ContactPrismElementForcesAndSourcesCore::ContactPrismElementForcesAndSourcesCore |
( |
Interface & |
m_field | ) |
|
Definition at line 10 of file ContactPrismElementForcesAndSourcesCore.cpp.
15 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
16 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
17 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
18 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
19 boost::make_shared<EntitiesFieldData>(MBENTITYSET)
25 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
26 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
27 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
28 boost::make_shared<EntitiesFieldData>(MBENTITYSET),
29 boost::make_shared<EntitiesFieldData>(MBENTITYSET)
46 boost::make_shared<DerivedEntitiesFieldData>(
dataOnSlave[
H1]),
64 boost::shared_ptr<BaseFunction>(
new TriPolynomialBase());
88 "Problem with creation data on element");
◆ getDataOnMasterFromEleSide()
const std::array<boost::shared_ptr<EntitiesFieldData>, LASTSPACE> MoFEM::ContactPrismElementForcesAndSourcesCore::getDataOnMasterFromEleSide |
( |
| ) |
|
|
inline |
◆ getDataOnSlaveFromEleSide()
const std::array<boost::shared_ptr<EntitiesFieldData>, LASTSPACE> MoFEM::ContactPrismElementForcesAndSourcesCore::getDataOnSlaveFromEleSide |
( |
| ) |
|
|
inline |
◆ getEntityFieldData()
MoFEMErrorCode MoFEM::ContactPrismElementForcesAndSourcesCore::getEntityFieldData |
( |
EntitiesFieldData & |
master_data, |
|
|
EntitiesFieldData & |
slave_data, |
|
|
const std::string & |
field_name, |
|
|
const EntityType |
type_lo = MBVERTEX , |
|
|
const EntityType |
type_hi = MBPOLYHEDRON |
|
) |
| const |
|
protected |
function that gets entity field data.
- Parameters
-
master_data | data fot master face |
slave_data | data fot master face |
field_name | field name of interest |
type_lo | lowest dimension entity type to be searched |
type_hi | highest dimension entity type to be searched |
Definition at line 784 of file ContactPrismElementForcesAndSourcesCore.cpp.
790 auto reset_data = [type_lo, type_hi](
auto &data) {
791 for (EntityType
t = type_lo;
t != type_hi; ++
t) {
792 for (
auto &dat : data.dataOnEntities[
t]) {
796 dat.getFieldData().resize(0,
false);
797 dat.getFieldDofs().resize(0,
false);
798 dat.getFieldEntities().resize(0,
false);
802 reset_data(master_data);
803 reset_data(slave_data);
809 auto lo = std::lower_bound(field_ents.begin(), field_ents.end(), lo_uid,
811 if (lo != field_ents.end()) {
814 auto hi = std::upper_bound(lo, field_ents.end(), hi_uid,
cmp_uid_hi);
816 for (
auto it = lo; it != hi; ++it)
817 if (
auto e = it->lock()) {
819 auto get_data = [&](
auto &data,
auto type,
auto side) {
820 auto &dat = data.dataOnEntities[
type][side];
821 auto &ent_field_dofs = dat.getFieldDofs();
822 auto &ent_field_data = dat.getFieldData();
823 dat.getFieldEntities().resize(1,
false);
824 dat.getFieldEntities()[0] = e.get();
825 dat.getBase() = e->getApproxBase();
826 dat.getSpace() = e->getSpace();
827 const int ent_order = e->getMaxOrder();
829 dat.getOrder() > ent_order ? dat.getOrder() : ent_order;
830 const auto dof_ent_field_data = e->getEntFieldData();
831 const int nb_dofs_on_ent = e->getNbDofsOnEnt();
832 ent_field_data.resize(nb_dofs_on_ent,
false);
833 noalias(ent_field_data) = e->getEntFieldData();
834 ent_field_dofs.resize(nb_dofs_on_ent,
false);
835 std::fill(ent_field_dofs.begin(), ent_field_dofs.end(),
nullptr);
836 if (
auto cache = e->entityCacheDataDofs.lock()) {
837 for (
auto dit = cache->loHi[0]; dit != cache->loHi[1]; ++dit) {
838 ent_field_dofs[(*dit)->getEntDofIdx()] =
839 reinterpret_cast<FEDofEntity *
>((*dit).get());
844 const EntityType
type = e->getEntType();
845 const int side = e->getSideNumberPtr()->side_number;
851 get_data(master_data,
type, side);
853 get_data(slave_data,
type, side - 6);
859 get_data(master_data,
type, 0);
861 get_data(slave_data,
type, 0);
866 "Entity type not implemented (FIXME)");
869 const int brother_side = e->getSideNumberPtr()->brother_side_number;
870 if (brother_side != -1)
872 "Case with brother side not implemented (FIXME)");
◆ getEntityIndices()
template<typename EXTRACTOR >
function that gets entity indices.
- Parameters
-
master_data | data fot master face |
slave_data | data fot master face |
field_name | field name of interest |
dofs | MultiIndex container keeping FENumeredDofEntity. |
type_lo | lowest dimension entity type to be searched |
type_hi | highest dimension entity type to be searched |
Definition at line 987 of file ContactPrismElementForcesAndSourcesCore.cpp.
994 auto clear_data = [type_lo, type_hi](
auto &data) {
995 for (EntityType
t = type_lo;
t != type_hi; ++
t) {
996 for (
auto &
d : data.dataOnEntities[
t]) {
997 d.getIndices().resize(0,
false);
998 d.getLocalIndices().resize(0,
false);
1003 clear_data(master_data);
1004 clear_data(slave_data);
1009 auto lo = std::lower_bound(ents_field.begin(), ents_field.end(), lo_uid,
1011 if (lo != ents_field.end()) {
1014 auto hi = std::upper_bound(lo, ents_field.end(), hi_uid,
cmp_uid_hi);
1017 std::vector<boost::weak_ptr<FieldEntity>> brother_ents_vec;
1019 for (
auto it = lo; it != hi; ++it)
1020 if (
auto e = it->lock()) {
1022 const EntityType
type = e->getEntType();
1023 const int side = e->getSideNumberPtr()->side_number;
1024 const int brother_side = e->getSideNumberPtr()->brother_side_number;
1025 if (brother_side != -1)
1027 "Not implemented case");
1029 auto get_indices = [&](
auto &data,
const auto type,
const auto side) {
1030 if (
auto cache = extractor(e).lock()) {
1031 for (
auto dit = cache->loHi[0]; dit != cache->loHi[1]; ++dit) {
1032 auto &dof = (**dit);
1033 auto &dat = data.dataOnEntities[
type][side];
1034 auto &ent_field_indices = dat.getIndices();
1035 auto &ent_field_local_indices = dat.getLocalIndices();
1036 if (ent_field_indices.empty()) {
1037 const int nb_dofs_on_ent = dof.getNbDofsOnEnt();
1038 ent_field_indices.resize(nb_dofs_on_ent,
false);
1039 ent_field_local_indices.resize(nb_dofs_on_ent,
false);
1040 std::fill(ent_field_indices.data().begin(),
1041 ent_field_indices.data().end(), -1);
1042 std::fill(ent_field_local_indices.data().begin(),
1043 ent_field_local_indices.data().end(), -1);
1045 const int idx = dof.getEntDofIdx();
1046 ent_field_indices[idx] = dof.getPetscGlobalDofIdx();
1047 ent_field_local_indices[idx] = dof.getPetscLocalDofIdx();
1056 get_indices(master_data,
type, side);
1058 get_indices(slave_data,
type, side - 6);
1064 get_indices(master_data,
type, 0);
1066 get_indices(slave_data,
type, 0);
1071 "Entity type not implemented");
◆ getGaussPtsMasterFromEleSide()
MatrixDouble& MoFEM::ContactPrismElementForcesAndSourcesCore::getGaussPtsMasterFromEleSide |
( |
| ) |
|
|
inline |
◆ getGaussPtsSlaveFromEleSide()
MatrixDouble& MoFEM::ContactPrismElementForcesAndSourcesCore::getGaussPtsSlaveFromEleSide |
( |
| ) |
|
|
inline |
◆ getNodesFieldData()
MoFEMErrorCode MoFEM::ContactPrismElementForcesAndSourcesCore::getNodesFieldData |
( |
const std::string |
field_name, |
|
|
VectorDouble & |
master_nodes_data, |
|
|
VectorDouble & |
slave_nodes_data, |
|
|
VectorDofs & |
master_nodes_dofs, |
|
|
VectorDofs & |
slave_nodes_dofs, |
|
|
VectorFieldEntities & |
master_field_entities, |
|
|
VectorFieldEntities & |
slave_field_entities, |
|
|
FieldSpace & |
master_space, |
|
|
FieldSpace & |
slave_space, |
|
|
FieldApproximationBase & |
master_base, |
|
|
FieldApproximationBase & |
slave_base |
|
) |
| const |
|
protected |
function that gets nodes field data.
- Parameters
-
field_name | field name of interest |
dofs | MultiIndex container keeping FENumeredDofEntity. |
master_nodes_data | vector containing master nodes data |
slave_nodes_data | vector containing master nodes data |
master_nodes_dofs | vector containing master nodes dofs |
slave_nodes_dofs | vector containing slave nodes dofs |
master_space | approximation energy space at master |
slave_space | approximation energy space at slave |
master_base | base for master face |
slave_base | base for slave face |
Definition at line 880 of file ContactPrismElementForcesAndSourcesCore.cpp.
893 auto set_zero = [](
auto &nodes_data,
auto &nodes_dofs,
auto &field_entities) {
894 nodes_data.resize(0,
false);
895 nodes_dofs.resize(0,
false);
896 field_entities.resize(0,
false);
898 set_zero(master_nodes_data, master_nodes_dofs, master_field_entities);
899 set_zero(slave_nodes_data, slave_nodes_dofs, slave_field_entities);
904 auto bit_number = (*field_it)->getBitNumber();
905 const int nb_dofs_on_vert = (*field_it)->getNbOfCoeffs();
906 master_space = slave_space = (*field_it)->getSpace();
907 master_base = slave_base = (*field_it)->getApproxBase();
911 bit_number, get_id_for_min_type<MBVERTEX>());
912 auto lo = std::lower_bound(field_ents.begin(), field_ents.end(), lo_uid,
914 if (lo != field_ents.end()) {
916 bit_number, get_id_for_max_type<MBVERTEX>());
917 auto hi = std::upper_bound(lo, field_ents.end(), hi_uid,
cmp_uid_hi);
921 for (
auto it = lo; it != hi; ++it) {
922 if (
auto e = it->lock()) {
923 nb_dofs += e->getEntFieldData().size();
929 auto init_set = [&](
auto &nodes_data,
auto &nodes_dofs,
930 auto &field_entities) {
931 constexpr
int num_nodes = 3;
932 const int max_nb_dofs = nb_dofs_on_vert * num_nodes;
933 nodes_data.resize(max_nb_dofs,
false);
934 nodes_dofs.resize(max_nb_dofs,
false);
935 field_entities.resize(num_nodes,
false);
937 fill(nodes_dofs.begin(), nodes_dofs.end(),
nullptr);
938 fill(field_entities.begin(), field_entities.end(),
nullptr);
941 init_set(master_nodes_data, master_nodes_dofs, master_field_entities);
942 init_set(slave_nodes_data, slave_nodes_dofs, slave_field_entities);
944 for (
auto it = lo; it != hi; ++it) {
945 if (
auto e = it->lock()) {
947 const auto &sn = e->getSideNumberPtr();
948 int side = sn->side_number;
950 auto set_data = [&](
auto &nodes_data,
auto &nodes_dofs,
951 auto &field_entities,
int side,
int pos) {
952 field_entities[side] = e.get();
953 if (
auto cache = e->entityCacheDataDofs.lock()) {
954 for (
auto dit = cache->loHi[0]; dit != cache->loHi[1];
956 const auto dof_idx = (*dit)->getEntDofIdx();
957 nodes_data[pos + dof_idx] = (*dit)->getFieldData();
958 nodes_dofs[pos + dof_idx] =
959 reinterpret_cast<FEDofEntity *
>((*dit).get());
965 set_data(master_nodes_data, master_nodes_dofs,
966 master_field_entities, side, side * nb_dofs_on_vert);
968 set_data(slave_nodes_data, slave_nodes_dofs,
969 slave_field_entities, (side - 3),
970 (side - 3) * nb_dofs_on_vert);
972 const int brother_side = sn->brother_side_number;
973 if (brother_side != -1)
975 "Not implemented (FIXME please)");
◆ getNodesIndices()
template<typename EXTRACTOR >
function that gets nodes indices.
- Parameters
-
field_name | field name of interest |
dofs | MultiIndex container keeping FENumeredDofEntity. |
master_nodes_indices | vector containing global master nodes indices |
master_local_nodes_indices | vector containing local master nodes indices |
slave_nodes_indices | vector containing global master nodes indices |
slave_local_nodes_indices | vector containing local master nodes indices |
Definition at line 1081 of file ContactPrismElementForcesAndSourcesCore.cpp.
1088 master_nodes_indices.resize(0,
false);
1089 master_local_nodes_indices.resize(0,
false);
1090 slave_nodes_indices.resize(0,
false);
1091 slave_local_nodes_indices.resize(0,
false);
1096 auto bit_number = (*field_it)->getBitNumber();
1097 const int nb_dofs_on_vert = (*field_it)->getNbOfCoeffs();
1100 bit_number, get_id_for_min_type<MBVERTEX>());
1101 auto lo = std::lower_bound(ents_field.begin(), ents_field.end(), lo_uid,
1103 if (lo != ents_field.end()) {
1105 bit_number, get_id_for_max_type<MBVERTEX>());
1106 auto hi = std::upper_bound(lo, ents_field.end(), hi_uid,
cmp_uid_hi);
1110 for (
auto it = lo; it != hi; ++it) {
1111 if (
auto e = it->lock()) {
1112 if (
auto cache = extractor(e).lock()) {
1113 nb_dofs += std::distance(cache->loHi[0], cache->loHi[1]);
1120 constexpr
int num_nodes = 3;
1121 const int max_nb_dofs = nb_dofs_on_vert * num_nodes;
1123 auto set_vec_size = [&](
auto &nodes_indices,
1124 auto &local_nodes_indices) {
1125 nodes_indices.resize(max_nb_dofs,
false);
1126 local_nodes_indices.resize(max_nb_dofs,
false);
1127 std::fill(nodes_indices.begin(), nodes_indices.end(), -1);
1128 std::fill(local_nodes_indices.begin(), local_nodes_indices.end(),
1132 set_vec_size(master_nodes_indices, master_local_nodes_indices);
1133 set_vec_size(slave_nodes_indices, slave_local_nodes_indices);
1135 for (
auto it = lo; it != hi; ++it) {
1136 if (
auto e = it->lock()) {
1138 const int side = e->getSideNumberPtr()->side_number;
1139 const int brother_side =
1140 e->getSideNumberPtr()->brother_side_number;
1141 if (brother_side != -1)
1143 "Not implemented case");
1145 auto get_indices = [&](
auto &nodes_indices,
1146 auto &local_nodes_indices,
1148 if (
auto cache = extractor(e).lock()) {
1149 for (
auto dit = cache->loHi[0]; dit != cache->loHi[1];
1151 const int idx = (*dit)->getPetscGlobalDofIdx();
1152 const int local_idx = (*dit)->getPetscLocalDofIdx();
1154 side * nb_dofs_on_vert + (*dit)->getDofCoeffIdx();
1155 nodes_indices[pos] = idx;
1156 local_nodes_indices[pos] = local_idx;
1162 get_indices(master_nodes_indices, master_local_nodes_indices,
1165 get_indices(slave_nodes_indices, slave_local_nodes_indices,
◆ getValueHdivDemkowiczBase()
Iterate user data operators.
- Returns
- MoFEMErrorCode
◆ loopOverOperators()
MoFEMErrorCode MoFEM::ContactPrismElementForcesAndSourcesCore::loopOverOperators |
( |
| ) |
|
|
protected |
Iterate user data operators.
- Returns
- MoFEMErrorCode
Definition at line 482 of file ContactPrismElementForcesAndSourcesCore.cpp.
485 constexpr std::array<UserDataOperator::OpType, 2> types{
487 std::array<std::string, 2> last_eval_field_name{std::string(), std::string()};
492 for (; oit != hi_oit; oit++) {
499 switch (oit->sPace) {
510 "Not implemented for this space", oit->sPace);
515 dataOnSlave[oit->sPace]->resetFieldDependentData();
525 boost::shared_ptr<EntitiesFieldData> op_master_data[2];
526 boost::shared_ptr<EntitiesFieldData> op_slave_data[2];
528 for (
int ss = 0; ss != 2; ss++) {
531 !ss ? oit->rowFieldName : oit->colFieldName;
533 const BitFieldId data_id = field_struture->getId();
534 const FieldSpace space = field_struture->getSpace();
540 if ((oit->getNumeredEntFiniteElementPtr()->getBitFieldIdData() &
544 "no data field < %s > on finite element < %s >",
547 if (oit->getOpType() & types[ss] ||
562 "Not implemented for this space", space);
571 boost::weak_ptr<EntityCacheNumeredDofs>
572 operator()(boost::shared_ptr<FieldEntity> &e) {
573 return e->entityCacheRowDofs;
579 MBPRISM, Extractor());
582 boost::weak_ptr<EntityCacheNumeredDofs>
583 operator()(boost::shared_ptr<FieldEntity> &e) {
584 return e->entityCacheColDofs;
589 MBPRISM, Extractor());
599 auto get_indices = [&](
auto &master,
auto &slave,
auto &ents,
603 master.dataOnEntities[MBVERTEX][0].getIndices(),
604 master.dataOnEntities[MBVERTEX][0].getLocalIndices(),
605 slave.dataOnEntities[MBVERTEX][0].getIndices(),
606 slave.dataOnEntities[MBVERTEX][0].getLocalIndices(), ex);
609 auto get_data = [&](EntitiesFieldData &master_data,
610 EntitiesFieldData &slave_data) {
613 master_data.dataOnEntities[MBVERTEX][0].getFieldData(),
614 slave_data.dataOnEntities[MBVERTEX][0].getFieldData(),
615 master_data.dataOnEntities[MBVERTEX][0].getFieldDofs(),
616 slave_data.dataOnEntities[MBVERTEX][0].getFieldDofs(),
617 master_data.dataOnEntities[MBVERTEX][0].getFieldEntities(),
618 slave_data.dataOnEntities[MBVERTEX][0].getFieldEntities(),
619 master_data.dataOnEntities[MBVERTEX][0].getSpace(),
620 slave_data.dataOnEntities[MBVERTEX][0].getSpace(),
621 master_data.dataOnEntities[MBVERTEX][0].getBase(),
622 slave_data.dataOnEntities[MBVERTEX][0].getBase());
628 boost::weak_ptr<EntityCacheNumeredDofs>
629 operator()(boost::shared_ptr<FieldEntity> &e) {
630 return e->entityCacheRowDofs;
634 CHKERR get_indices(*op_master_data[ss], *op_slave_data[ss],
638 boost::weak_ptr<EntityCacheNumeredDofs>
639 operator()(boost::shared_ptr<FieldEntity> &e) {
640 return e->entityCacheColDofs;
644 CHKERR get_indices(*op_master_data[ss], *op_slave_data[ss],
648 CHKERR get_data(*op_master_data[ss], *op_slave_data[ss]);
673 "Not implemented for this space", space);
684 type = cast_oit->getFaceType();
692 "Wrong combination of FaceType and OpType, OPROW or OPCOL "
693 "combined with face-face OpType");
700 "Wrong combination of FaceType and OpType, OPROWCOL "
701 "combined with face-face OpType");
706 "Face type is not set");
719 CHKERR oit->opRhs(*op_master_data[0],
false);
727 CHKERR oit->opRhs(*op_slave_data[0],
false);
735 CHKERR oit->opRhs(*op_master_data[1],
false);
743 CHKERR oit->opRhs(*op_slave_data[1],
false);
751 CHKERR oit->opLhs(*op_master_data[0], *op_master_data[1]);
759 CHKERR oit->opLhs(*op_master_data[0], *op_slave_data[1]);
767 CHKERR oit->opLhs(*op_slave_data[0], *op_master_data[1]);
775 CHKERR oit->opLhs(*op_slave_data[0], *op_slave_data[1]);
◆ operator()()
MoFEMErrorCode MoFEM::ContactPrismElementForcesAndSourcesCore::operator() |
( |
| ) |
|
|
virtual |
function is run for every finite element
It is used to calculate element local matrices and assembly. It can be used for post-processing.
Reimplemented from MoFEM::ForcesAndSourcesCore.
Definition at line 140 of file ContactPrismElementForcesAndSourcesCore.cpp.
151 auto get_coord_and_normal = [&]() {
156 coords.resize(num_nodes * 3,
false);
172 &vec_double(
r + 0), &vec_double(
r + 1), &vec_double(
r + 2));
175 auto t_coords_master = get_vec_ptr(
coords);
176 auto t_coords_slave = get_vec_ptr(
coords, 9);
177 auto t_normal_master = get_vec_ptr(
normal);
178 auto t_normal_slave = get_vec_ptr(
normal, 3);
187 &diff_ptr[0], &diff_ptr[1]);
195 for (
int nn = 0; nn != 3; ++nn) {
196 t_t1_master(
i) += t_coords_master(
i) * t_diff(N0);
197 t_t1_slave(
i) += t_coords_slave(
i) * t_diff(N0);
203 aRea[0] = sqrt(t_normal_master(
i) * t_normal_master(
i)) / 2.;
204 aRea[1] = sqrt(t_normal_slave(
i) * t_normal_slave(
i)) / 2.;
213 CHKERR get_coord_and_normal();
227 CHKERR getEntitySense<MBEDGE>(data_curl);
228 CHKERR getEntityDataOrder<MBEDGE>(data_curl,
HCURL);
229 CHKERR getEntitySense<MBTRI>(data_curl);
230 CHKERR getEntityDataOrder<MBTRI>(data_curl,
HCURL);
235 CHKERR getEntitySense<MBTRI>(data_div);
236 CHKERR getEntityDataOrder<MBTRI>(data_div,
HDIV);
239 data_div.spacesOnEntities[MBTRI].set(
HDIV);
244 CHKERR getEntitySense<MBTRI>(data_l2);
245 CHKERR getEntityDataOrder<MBTRI>(data_l2,
L2);
248 auto clean_data = [](EntitiesFieldData &data) {
251 for (EntityType
t = MBVERTEX;
t != MBMAXTYPE; ++
t) {
252 data.spacesOnEntities[
t].reset();
253 data.basesOnEntities[
t].reset();
256 data.basesOnSpaces[s].reset();
261 auto copy_data = [](EntitiesFieldData &data, EntitiesFieldData ©_data,
265 if (shift != 0 && shift != 6) {
267 "Wrong shift for contact prism element");
270 data.bAse = copy_data.bAse;
271 for (
auto t : {MBVERTEX, MBEDGE, MBTRI}) {
272 data.spacesOnEntities[
t] = copy_data.spacesOnEntities[
t];
273 data.basesOnEntities[
t] = copy_data.basesOnEntities[
t];
274 data.basesOnSpaces[
t] = copy_data.basesOnSpaces[
t];
275 data.brokenBasesOnSpaces[
t] = copy_data.brokenBasesOnSpaces[
t];
278 for (
int ii = 0; ii != 3; ++ii) {
279 data.dataOnEntities[MBEDGE][ii].getSense() =
280 copy_data.dataOnEntities[MBEDGE][ii + shift].getSense();
281 data.dataOnEntities[MBEDGE][ii].getOrder() =
282 copy_data.dataOnEntities[MBEDGE][ii + shift].getOrder();
286 data.dataOnEntities[MBTRI][0].getSense() =
287 copy_data.dataOnEntities[MBTRI][3].getSense();
288 data.dataOnEntities[MBTRI][0].getOrder() =
289 copy_data.dataOnEntities[MBTRI][3].getOrder();
291 data.dataOnEntities[MBTRI][0].getSense() =
292 copy_data.dataOnEntities[MBTRI][4].getSense();
293 data.dataOnEntities[MBTRI][0].getOrder() =
294 copy_data.dataOnEntities[MBTRI][4].getOrder();
300 auto copy_data_hdiv = [](EntitiesFieldData &data,
301 EntitiesFieldData ©_data,
const int shift) {
304 if (shift != 3 && shift != 4) {
306 "Wrong shift for contact prism element");
309 data.bAse = copy_data.bAse;
311 for (
auto t : {MBVERTEX, MBTRI}) {
312 data.spacesOnEntities[
t] = copy_data.spacesOnEntities[MBVERTEX];
313 data.basesOnEntities[
t] = copy_data.basesOnEntities[MBVERTEX];
314 data.basesOnSpaces[
t] = copy_data.basesOnSpaces[MBVERTEX];
317 auto &cpy_ent_dat = copy_data.dataOnEntities[MBTRI][shift];
318 auto &ent_dat = data.dataOnEntities[MBTRI][0];
319 ent_dat.getBase() = cpy_ent_dat.getBase();
320 ent_dat.getSpace() = cpy_ent_dat.getSpace();
321 ent_dat.getSense() = ent_dat.getSense();
322 ent_dat.getOrder() = cpy_ent_dat.getOrder();
335 int rule =
getRule(order_row, order_col, order_data);
347 "Number of Gauss Points at Master triangle is different than slave");
364 CHKERR Tools::shapeFunMBTRI<1>(
378 for (
int dd = 0;
dd < 3;
dd++) {
425 boost::shared_ptr<BaseFunctionCtx>(
new EntPolynomialBaseCtx(
432 boost::shared_ptr<BaseFunctionCtx>(
new EntPolynomialBaseCtx(
443 boost::shared_ptr<BaseFunctionCtx>(
new EntPolynomialBaseCtx(
449 boost::shared_ptr<BaseFunctionCtx>(
new EntPolynomialBaseCtx(
462 "Not yet implemented");
466 "Not yet implemented");
471 "Not yet implemented");
◆ setDefaultGaussPts()
MoFEMErrorCode MoFEM::ContactPrismElementForcesAndSourcesCore::setDefaultGaussPts |
( |
const int |
rule | ) |
|
|
protected |
◆ aRea
std::array<double, 2> MoFEM::ContactPrismElementForcesAndSourcesCore::aRea |
|
protected |
◆ coords
VectorDouble MoFEM::ContactPrismElementForcesAndSourcesCore::coords |
|
protected |
◆ coordsAtGaussPtsMaster
MatrixDouble MoFEM::ContactPrismElementForcesAndSourcesCore::coordsAtGaussPtsMaster |
|
protected |
◆ coordsAtGaussPtsSlave
MatrixDouble MoFEM::ContactPrismElementForcesAndSourcesCore::coordsAtGaussPtsSlave |
|
protected |
◆ dataH1Master
◆ dataH1Slave
◆ dataHcurlMaster
◆ dataHcurlSlave
◆ dataHdivMaster
◆ dataHdivSlave
◆ dataL2Master
◆ dataL2Slave
◆ dataNoFieldMaster
◆ dataNoFieldSlave
◆ dataOnMaster
◆ dataOnSlave
◆ derivedDataOnMaster
const std::array<boost::shared_ptr<EntitiesFieldData>, LASTSPACE> MoFEM::ContactPrismElementForcesAndSourcesCore::derivedDataOnMaster |
|
protected |
◆ derivedDataOnSlave
const std::array<boost::shared_ptr<EntitiesFieldData>, LASTSPACE> MoFEM::ContactPrismElementForcesAndSourcesCore::derivedDataOnSlave |
|
protected |
◆ gaussPtsMaster
MatrixDouble MoFEM::ContactPrismElementForcesAndSourcesCore::gaussPtsMaster |
|
protected |
◆ gaussPtsSlave
MatrixDouble MoFEM::ContactPrismElementForcesAndSourcesCore::gaussPtsSlave |
|
protected |
◆ nbGaussPts
int MoFEM::ContactPrismElementForcesAndSourcesCore::nbGaussPts |
|
private |
◆ normal
VectorDouble MoFEM::ContactPrismElementForcesAndSourcesCore::normal |
|
protected |
◆ opContravariantTransform
◆ tangentMasterOne
VectorDouble MoFEM::ContactPrismElementForcesAndSourcesCore::tangentMasterOne |
|
protected |
◆ tangentMasterTwo
VectorDouble MoFEM::ContactPrismElementForcesAndSourcesCore::tangentMasterTwo |
|
protected |
◆ tangentSlaveOne
VectorDouble MoFEM::ContactPrismElementForcesAndSourcesCore::tangentSlaveOne |
|
protected |
◆ tangentSlaveTwo
VectorDouble MoFEM::ContactPrismElementForcesAndSourcesCore::tangentSlaveTwo |
|
protected |
The documentation for this struct was generated from the following files:
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
auto & getRowFieldEnts() const
int getNinTheLoop() const
get number of evaluated element in the loop
#define CATCH_OP_ERRORS(OP)
MoFEMErrorCode getNoFieldFieldData(const int bit_number, VectorDouble &ent_field_data, VectorDofs &ent_field_dofs, VectorFieldEntities &ent_field) const
Get field data on nodes.
virtual MoFEMErrorCode opRhs(EntitiesFieldData &data, const bool error_if_no_base=false)
int getMaxRowOrder() const
Get max order of approximation for field in rows.
@ OPSPACE
operator do Work is execute on space data
static auto cmp_uid_hi(const UId &b, const boost::weak_ptr< FieldEntity > &a)
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
@ L2
field with C-1 continuity
static QUAD *const QUAD_2D_TABLE[]
virtual const Field * get_field_structure(const std::string &name, enum MoFEMTypes bh=MF_EXIST) const =0
get field structure
virtual MoFEMErrorCode setGaussPts(int order_row, int order_col, int order_data)
set user specific integration rule
virtual FieldBitNumber get_field_bit_number(const std::string name) const =0
get field bit number
const FieldEntity_vector_view & getDataFieldEnts() const
int getMaxDataOrder() const
Get max order of approximation for data fields.
std::bitset< BITFIELDID_SIZE > BitFieldId
Field Id.
#define QUAD_2D_TABLE_SIZE
int getMaxColOrder() const
Get max order of approximation for field in columns.
constexpr std::enable_if<(Dim0<=2 &&Dim1<=2), Tensor2_Expr< Levi_Civita< T >, T, Dim0, Dim1, i, j > >::type levi_civita(const Index< i, Dim0 > &, const Index< j, Dim1 > &)
levi_civita functions to make for easy adhoc use
MoFEMErrorCode getNoFieldRowIndices(EntitiesFieldData &data, const int bit_number) const
get col NoField indices
@ OPROWCOL
operator doWork is executed on FE rows &columns
std::array< std::bitset< LASTSPACE >, MBMAXTYPE > spacesOnEntities
spaces on entity types
const Field_multiIndex * fieldsPtr
raw pointer to fields container
FieldSpace
approximation spaces
#define CHKERR
Inline error check.
MoFEMErrorCode getNoFieldColIndices(EntitiesFieldData &data, const int bit_number) const
get col NoField indices
virtual moab::Interface & get_moab()=0
auto & getUserPolynomialBase()
Get the User Polynomial Base object.
UId getLocalUniqueIdCalculate()
Get the Local Unique Id Calculate object.
@ OPCOL
operator doWork function is executed on FE columns
boost::ptr_deque< UserDataOperator > opPtrVector
Vector of finite element users data operators.
const std::array< boost::shared_ptr< EntitiesFieldData >, LASTSPACE > dataOnElement
Entity data on element entity rows fields.
MoFEMErrorCode createDataOnElement(EntityType type)
Create a entity data on element object.
static auto cmp_uid_lo(const boost::weak_ptr< FieldEntity > &a, const UId &b)
ForcesAndSourcesCore(Interface &m_field)
@ LASTSPACE
FieldSpace in [ 0, LASTSPACE )
virtual int getRule(int order_row, int order_col, int order_data)
another variant of getRule
EntityHandle get_id_for_max_type()
auto getFEName() const
get finite element name
constexpr double t
plate stiffness
std::bitset< LASTBASE > bAse
bases on element
FTensor::Index< 'i', SPACE_DIM > i
MoFEMErrorCode getSpacesAndBaseOnEntities(EntitiesFieldData &data) const
Get field approximation space and base on entities.
EntitiesFieldData::EntData EntData
constexpr auto field_name
EntitiesFieldData & dataH1
const double v
phase velocity of light in medium (cm/ns)
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
FTensor::Index< 'j', 3 > j
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
@ HCURL
field with continuous tangents
@ MOFEM_DATA_INCONSISTENCY
auto & getColFieldEnts() const
FieldApproximationBase
approximation base
UBlasVector< double > VectorDouble
std::array< boost::ptr_vector< EntData >, MBMAXTYPE > dataOnEntities
boost::shared_ptr< const NumeredEntFiniteElement > numeredEntFiniteElementPtr
Field_multiIndex::index< FieldName_mi_tag >::type::iterator field_it
@ CONTINUOUS
Regular field.
FTensor::Index< 'k', 3 > k
EntityHandle get_id_for_min_type()
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ HDIV
field with continuous normal traction
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ NOFIELD
scalar or vector of scalars describe (no true field)
@ OPROW
operator doWork function is executed on FE rows