14 meshPositionsFieldName(
"MESH_NODE_POSITIONS"),
15 opHOCoordsAndNormals(hoCoordsAtGaussPtsF3, nOrmals_at_GaussPtF3,
16 tAngent1_at_GaussPtF3, tAngent2_at_GaussPtF3,
17 hoCoordsAtGaussPtsF4, nOrmals_at_GaussPtF4,
18 tAngent1_at_GaussPtF4, tAngent2_at_GaussPtF4) {
22 "Problem with creation data on element")
40 coords.resize(num_nodes * 3,
false);
65 CHKERR getEntitySense<MBEDGE>(data_curl);
66 CHKERR getEntityDataOrder<MBEDGE>(data_curl,
HCURL);
67 CHKERR getEntitySense<MBTRI>(data_curl);
73 CHKERR getEntitySense<MBTRI>(data_div);
74 CHKERR getEntityDataOrder<MBTRI>(data_div,
HDIV);
79 CHKERR getEntitySense<MBTRI>(data_l2);
80 CHKERR getEntityDataOrder<MBTRI>(data_l2,
L2);
86 int rule =
getRule(order_row, order_col, order_data);
99 gaussPts.resize(3, nb_gauss_pts,
false);
100 cblas_dcopy(nb_gauss_pts, &
QUAD_2D_TABLE[rule]->points[1], 3,
102 cblas_dcopy(nb_gauss_pts, &
QUAD_2D_TABLE[rule]->points[2], 3,
110 cblas_dcopy(3 * nb_gauss_pts,
QUAD_2D_TABLE[rule]->points, 1, shape_ptr,
129 if (nb_gauss_pts == 0)
134 for (
int gg = 0; gg < nb_gauss_pts; gg++) {
135 for (
int dd = 0; dd < 3; dd++) {
167 "Not yet implemented");
171 "Not yet implemented");
175 "Not yet implemented");
181 "Not yet implemented");
186 auto check_field = [&]() {
191 (*field_it)->getId())
242 "User operator and finite element do not work together");
FieldApproximationBase
approximation base
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ L2
field with C-1 continuity
@ LASTSPACE
FieldSpace in [ 0, LASTSPACE )
@ HCURL
field with continuous tangents
@ HDIV
field with continuous normal traction
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
@ MOFEM_DATA_INCONSISTENCY
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
Field_multiIndex::index< FieldName_mi_tag >::type::iterator field_it
#define QUAD_2D_TABLE_SIZE
static QUAD *const QUAD_2D_TABLE[]
const Field_multiIndex * fieldsPtr
raw pointer to fields container
virtual FieldBitNumber get_field_bit_number(const std::string name) const =0
get field bit number
virtual moab::Interface & get_moab()=0
virtual MoFEMErrorCode opRhs(EntitiesFieldData &data, const bool error_if_no_base=false)
Deprecated interface functions.
data structure for finite element entity
std::array< std::bitset< LASTSPACE >, MBMAXTYPE > spacesOnEntities
spaces on entity types
std::bitset< LASTBASE > bAse
bases on element
std::array< boost::ptr_vector< EntData >, MBMAXTYPE > dataOnEntities
boost::shared_ptr< const NumeredEntFiniteElement > numeredEntFiniteElementPtr
MultiIndex Tag for field name.
FlatPrism finite element.
MatrixDouble tAngent1_at_GaussPtF3
MatrixDouble hoCoordsAtGaussPtsF4
MatrixDouble hoCoordsAtGaussPtsF3
MatrixDouble nOrmals_at_GaussPtF3
MatrixDouble tAngent2_at_GaussPtF3
MatrixDouble coordsAtGaussPts
MoFEMErrorCode operator()()
function is run for every finite element
MatrixDouble nOrmals_at_GaussPtF4
MatrixDouble tAngent2_at_GaussPtF4
MatrixDouble tAngent1_at_GaussPtF4
OpGetCoordsAndNormalsOnPrism opHOCoordsAndNormals
FlatPrismElementForcesAndSourcesCore(Interface &m_field)
std::string meshPositionsFieldName
Class used to pass element data to calculate base functions on flat prism.
Calculate base functions on tetrahedralFIXME: Need moab and mofem finite element structure to work (t...
ForcesAndSourcesCore * ptrFE
structure to get information form mofem into EntitiesFieldData
MoFEMErrorCode loopOverOperators()
Iterate user data operators.
int getMaxRowOrder() const
Get max order of approximation for field in rows.
MoFEMErrorCode getSpacesAndBaseOnEntities(EntitiesFieldData &data) const
Get field approximation space and base on entities.
virtual MoFEMErrorCode setGaussPts(int order_row, int order_col, int order_data)
set user specific integration rule
MoFEMErrorCode getEntityFieldData(EntitiesFieldData &data, const int bit_number, const EntityType type_lo=MBVERTEX, const EntityType type_hi=MBPOLYHEDRON) const
auto & getElementPolynomialBase()
Get the Entity Polynomial Base object.
EntitiesFieldData & dataH1
virtual int getRule(int order_row, int order_col, int order_data)
another variant of getRule
const std::array< boost::shared_ptr< EntitiesFieldData >, LASTSPACE > dataOnElement
Entity data on element entity rows fields.
MatrixDouble gaussPts
Matrix of integration points.
int getMaxColOrder() const
Get max order of approximation for field in columns.
MoFEMErrorCode getNodesFieldData(EntitiesFieldData &data, const int bit_number) const
Get data on nodes.
int getMaxDataOrder() const
Get max order of approximation for data fields.
MoFEMErrorCode createDataOnElement(EntityType type)
Create a entity data on element object.
MoFEMErrorCode calculateNormals()