|
| v0.14.0
|
Volume finite element base.
More...
#include <src/finite_elements/VolumeElementForcesAndSourcesCore.hpp>
|
enum | Switches |
|
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
} |
|
|
| VolumeElementForcesAndSourcesCore (Interface &m_field, const EntityType type=MBTET) |
|
MoFEMErrorCode | operator() () |
| function is run for every finite element More...
|
|
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 refernce 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...
|
|
|
virtual MoFEMErrorCode | setIntegrationPts () |
| Set integration points. More...
|
|
virtual MoFEMErrorCode | calculateVolumeAndJacobian () |
| Calculate element volume and Jacobian. More...
|
|
virtual MoFEMErrorCode | calculateCoordinatesAtGaussPts () |
| Calculate coordinate at integration points. More...
|
|
virtual MoFEMErrorCode | getSpaceBaseAndOrderOnElement () |
| Determine approximation space and order of base functions. More...
|
|
virtual MoFEMErrorCode | transformBaseFunctions () |
| Transform base functions based on geometric element Jacobian. 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) |
|
Volume finite element base.
User is implementing own operator at Gauss point level, by class derived from VolumeElementForcesAndSourcesCore::UserDataOperator. Arbitrary number of operator can be added by pushing objects to OpPtrVector
- Examples
- build_large_problem.cpp, child_and_parent.cpp, eigen_elastic.cpp, elasticity.cpp, elasticity_mixed_formulation.cpp, field_evaluator.cpp, forces_and_sources_testing_users_base.cpp, hello_world.cpp, lorentz_force.cpp, MagneticElement.hpp, mesh_smoothing.cpp, navier_stokes.cpp, operators_tests.cpp, photon_diffusion.cpp, plot_base.cpp, Remodeling.hpp, simple_contact_thermal.cpp, simple_elasticity.cpp, SmallStrainPlasticity.hpp, test_cache_on_entities.cpp, testing_jacobian_of_hook_element.cpp, and testing_jacobian_of_hook_scaled_with_density_element.cpp.
Definition at line 26 of file VolumeElementForcesAndSourcesCore.hpp.
◆ Switches
◆ VolumeElementForcesAndSourcesCore()
VolumeElementForcesAndSourcesCore::VolumeElementForcesAndSourcesCore |
( |
Interface & |
m_field, |
|
|
const EntityType |
type = MBTET |
|
) |
| |
- Examples
- SmallStrainPlasticity.hpp.
Definition at line 9 of file VolumeElementForcesAndSourcesCore.cpp.
16 tJac(&
jAc(0, 0), &
jAc(0, 1), &
jAc(0, 2), &
jAc(1, 0), &
jAc(1, 1),
◆ calculateCoordinatesAtGaussPts()
MoFEMErrorCode VolumeElementForcesAndSourcesCore::calculateCoordinatesAtGaussPts |
( |
| ) |
|
|
protectedvirtual |
Calculate coordinate at integration points.
- Returns
- Error code
Definition at line 253 of file VolumeElementForcesAndSourcesCore.cpp.
259 double *shape_functions_ptr = &*shape_functions.data().begin();
260 const size_t nb_base_functions = shape_functions.size2();
261 const size_t nb_gauss_pts =
gaussPts.size2();
268 shape_functions_ptr);
269 for (
unsigned int gg = 0; gg != nb_gauss_pts; ++gg) {
272 for (
int bb = 0; bb != nb_base_functions; ++bb) {
273 t_coords_at_gauss_ptr(
i) += t_coords(
i) * t_shape_functions;
277 ++t_coords_at_gauss_ptr;
◆ calculateVolumeAndJacobian()
MoFEMErrorCode VolumeElementForcesAndSourcesCore::calculateVolumeAndJacobian |
( |
| ) |
|
|
protectedvirtual |
Calculate element volume and Jacobian.
Note that at that point is assumed that geometry is exclusively defined by corner nodes.
- Returns
- Error code
Definition at line 196 of file VolumeElementForcesAndSourcesCore.cpp.
204 auto get_tet_t_diff_n = [&]() {
210 auto get_hex_t_diff_n = [&]() {
217 auto get_t_diff_n = [&]() {
219 return get_tet_t_diff_n();
220 return get_hex_t_diff_n();
223 auto t_diff_n = get_t_diff_n();
232 tJac(
i,
j) += t_coords(
i) * t_diff_n(
j);
◆ getSpaceBaseAndOrderOnElement()
MoFEMErrorCode VolumeElementForcesAndSourcesCore::getSpaceBaseAndOrderOnElement |
( |
| ) |
|
|
protectedvirtual |
◆ operator()()
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 449 of file VolumeElementForcesAndSourcesCore.cpp.
457 boost::shared_ptr<BaseFunction>(
new TetPolynomialBase());
461 boost::shared_ptr<BaseFunction>(
new HexPolynomialBase());
◆ setIntegrationPts()
MoFEMErrorCode VolumeElementForcesAndSourcesCore::setIntegrationPts |
( |
| ) |
|
|
protectedvirtual |
Set integration points.
- Returns
- Error code
Definition at line 22 of file VolumeElementForcesAndSourcesCore.cpp.
30 auto get_rule_by_type = [&]() {
33 return getRule(order_row + 1, order_col + 1, order_data + 1);
35 return getRule(order_row, order_col, order_data);
39 const int rule = get_rule_by_type();
41 auto calc_base_for_tet = [&]() {
43 const size_t nb_gauss_pts =
gaussPts.size2();
46 base.resize(nb_gauss_pts, 4,
false);
47 diff_base.resize(nb_gauss_pts, 12,
false);
50 double *diff_shape_ptr = &*diff_base.data().begin();
51 for (
int gg = 0; gg != nb_gauss_pts; ++gg) {
52 for (
int nn = 0; nn != 4; ++nn) {
53 for (
int dd = 0;
dd != 3; ++
dd, ++diff_shape_ptr) {
61 auto calc_base_for_hex = [&]() {
63 const size_t nb_gauss_pts =
gaussPts.size2();
66 base.resize(nb_gauss_pts, 8,
false);
67 diff_base.resize(nb_gauss_pts, 24,
false);
68 for (
int gg = 0; gg != nb_gauss_pts; ++gg) {
108 auto set_integration_pts_for_hex = [&]() {
115 auto set_integration_pts_for_tet = [&]() {
126 gaussPts.resize(4, nb_gauss_pts,
false);
127 cblas_dcopy(nb_gauss_pts, &
QUAD_3D_TABLE[rule]->points[1], 4,
129 cblas_dcopy(nb_gauss_pts, &
QUAD_3D_TABLE[rule]->points[2], 4,
131 cblas_dcopy(nb_gauss_pts, &
QUAD_3D_TABLE[rule]->points[3], 4,
140 base.resize(nb_gauss_pts, 4,
false);
141 diff_base.resize(nb_gauss_pts, 12,
false);
142 double *shape_ptr = &*base.data().begin();
143 cblas_dcopy(4 * nb_gauss_pts,
QUAD_3D_TABLE[rule]->points, 1, shape_ptr,
145 double *diff_shape_ptr = &*diff_base.data().begin();
146 for (
int gg = 0; gg != nb_gauss_pts; ++gg) {
147 for (
int nn = 0; nn != 4; ++nn) {
148 for (
int dd = 0;
dd != 3; ++
dd, ++diff_shape_ptr) {
164 CHKERR set_integration_pts_for_tet();
167 CHKERR set_integration_pts_for_hex();
168 CHKERR calc_base_for_hex();
172 "Element type not implemented: %d",
type);
177 const size_t nb_gauss_pts =
gaussPts.size2();
181 CHKERR calc_base_for_tet();
184 CHKERR calc_base_for_hex();
188 "Element type not implemented: %d",
type);
◆ transformBaseFunctions()
MoFEMErrorCode VolumeElementForcesAndSourcesCore::transformBaseFunctions |
( |
| ) |
|
|
protectedvirtual |
Transform base functions based on geometric element Jacobian.
This function apply transformation to base functions and its derivatives. For example when base functions for H-div are present the Piola-Transformarion is applied to base functions and their derivatives.
- Returns
- Error code
Definition at line 368 of file VolumeElementForcesAndSourcesCore.cpp.
378 if ((data.getDiffN(base).size1() == 4) &&
379 (data.getDiffN(base).size2() == 3)) {
380 const size_t nb_gauss_pts =
gaussPts.size2();
381 const size_t nb_base_functions = 4;
382 new_diff_n.resize(nb_gauss_pts, 3 * nb_base_functions,
false);
383 double *new_diff_n_ptr = &*new_diff_n.data().begin();
385 new_diff_n_ptr, &new_diff_n_ptr[1], &new_diff_n_ptr[2]);
386 double *t_diff_n_ptr = &*data.getDiffN(base).data().begin();
387 for (
unsigned int gg = 0; gg != nb_gauss_pts; gg++) {
389 t_diff_n_ptr, &t_diff_n_ptr[1], &t_diff_n_ptr[2]);
390 for (
unsigned int bb = 0; bb != nb_base_functions; bb++) {
391 t_new_diff_n(
i) = t_diff_n(
i);
396 data.getDiffN(base).resize(new_diff_n.size1(), new_diff_n.size2(),
398 data.getDiffN(base).swap(new_diff_n);
409 for (EntityType
t = CN::TypeDimensionMap[2].first;
410 t <= CN::TypeDimensionMap[2].second; ++
t) {
417 for (
auto t : {MBTRI, MBTET}) {
420 d.getDiffN(base) /= 6;
429 for (EntityType
t = CN::TypeDimensionMap[3].first;
430 t <= CN::TypeDimensionMap[3].second; ++
t) {
◆ UserDataOperator
- Examples
- build_large_problem.cpp, continuity_check_on_contact_prism_side_ele.cpp, continuity_check_on_skeleton_3d.cpp, elasticity.cpp, field_evaluator.cpp, hcurl_curl_operator.cpp, hdiv_divergence_operator.cpp, lorentz_force.cpp, NavierStokesElement.hpp, Remodeling.hpp, simple_interface.cpp, test_cache_on_entities.cpp, and UnsaturatedFlow.hpp.
Definition at line 105 of file VolumeElementForcesAndSourcesCore.hpp.
◆ conn
const EntityHandle* MoFEM::VolumeElementForcesAndSourcesCore::conn |
|
protected |
◆ coords
VectorDouble MoFEM::VolumeElementForcesAndSourcesCore::coords |
|
protected |
◆ invJac
◆ jAc
◆ meshPositionsFieldName
std::string MoFEM::VolumeElementForcesAndSourcesCore::meshPositionsFieldName |
◆ num_nodes
int MoFEM::VolumeElementForcesAndSourcesCore::num_nodes |
|
protected |
◆ opContravariantPiolaTransform
◆ opCovariantPiolaTransform
◆ opSetInvJacH1
OpSetInvJacH1 MoFEM::VolumeElementForcesAndSourcesCore::opSetInvJacH1 |
|
protected |
◆ opSetInvJacHdivAndHcurl
◆ tInvJac
◆ tJac
◆ vOlume
double& MoFEM::VolumeElementForcesAndSourcesCore::vOlume |
|
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()
virtual MoFEMErrorCode setIntegrationPts()
Set integration points.
MatrixInt facesNodesOrder
order of face nodes on element
std::string meshPositionsFieldName
MoFEMErrorCode calBernsteinBezierBaseFunctionsOnElement()
Calculate Bernstein-Bezier base.
virtual MoFEMErrorCode opRhs(EntitiesFieldData &data, const bool error_if_no_base=false)
int getMaxRowOrder() const
Get max order of approximation for field in rows.
MoFEMErrorCode getFaceNodes(EntitiesFieldData &data) const
Get nodes on faces.
EntityType lastEvaluatedElementEntityType
Last evaluated type of element entity.
virtual MPI_Comm & get_comm() const =0
@ L2
field with C-1 continuity
OpSetCovariantPiolaTransform opCovariantPiolaTransform
UBlasMatrix< double > MatrixDouble
virtual MoFEMErrorCode setGaussPts(int order_row, int order_col, int order_data)
set user specific integration rule
int getMaxDataOrder() const
Get max order of approximation for data fields.
EntitiesFieldData & dataHdiv
OpSetInvJacHdivAndHcurl opSetInvJacHdivAndHcurl
virtual MoFEMErrorCode calculateCoordinatesAtGaussPts()
Calculate coordinate at integration points.
auto & getElementPolynomialBase()
Get the Entity Polynomial Base object.
int getMaxColOrder() const
Get max order of approximation for field in columns.
MoFEMErrorCode calHierarchicalBaseFunctionsOnElement()
Calculate base functions.
std::array< std::bitset< LASTSPACE >, MBMAXTYPE > spacesOnEntities
spaces on entity types
MatrixInt facesNodes
nodes on finite element faces
double zeta
Viscous hardening.
MoFEMErrorCode invertTensor3by3(ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
Calculate inverse of tensor rank 2 at integration points.
EntitiesFieldData & dataL2
#define CHKERR
Inline error check.
virtual MoFEMErrorCode calculateVolumeAndJacobian()
Calculate element volume and Jacobian.
virtual moab::Interface & get_moab()=0
MatrixDouble coordsAtGaussPts
coordinated at gauss points
virtual MoFEMErrorCode getSpaceBaseAndOrderOnElement()
Determine approximation space and order of base functions.
const EntityHandle * conn
MoFEMErrorCode createDataOnElement(EntityType type)
Create a entity data on element object.
ForcesAndSourcesCore(Interface &m_field)
virtual int getRule(int order_row, int order_col, int order_data)
another variant of getRule
OpSetInvJacH1 opSetInvJacH1
FTensor::Tensor2< double *, 3, 3 > tJac
constexpr double t
plate stiffness
FTensor::Index< 'i', SPACE_DIM > i
static QUAD *const QUAD_3D_TABLE[]
MoFEMErrorCode getSpacesAndBaseOnEntities(EntitiesFieldData &data) const
Get field approximation space and base on entities.
EntitiesFieldData::EntData EntData
#define QUAD_3D_TABLE_SIZE
EntitiesFieldData & dataH1
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
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)
#define MOFEM_LOG(channel, severity)
Log.
FTensor::Index< 'j', 3 > j
EntitiesFieldData & dataHcurl
@ AINSWORTH_LEGENDRE_BASE
Ainsworth Cole (Legendre) approx. base .
@ HCURL
field with continuous tangents
@ MOFEM_DATA_INCONSISTENCY
MatrixDouble gaussPts
Matrix of integration points.
OpSetContravariantPiolaTransform opContravariantPiolaTransform
FieldApproximationBase
approximation base
std::array< boost::ptr_vector< EntData >, MBMAXTYPE > dataOnEntities
MoFEMErrorCode loopOverOperators()
Iterate user data operators.
boost::shared_ptr< const NumeredEntFiniteElement > numeredEntFiniteElementPtr
FTensor::Tensor2< double *, 3, 3 > tInvJac
#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 ...
virtual MoFEMErrorCode transformBaseFunctions()
Transform base functions based on geometric element Jacobian.