12#ifndef __EDGEELEMENTFORCESANDSURCESCORE_HPP__
13#define __EDGEELEMENTFORCESANDSURCESCORE_HPP__
15using namespace boost::numeric;
19struct FaceElementForcesAndSourcesCoreOnSide;
69 using ForcesAndSourcesCore::UserDataOperator::UserDataOperator;
157 template <
int DIM = 3>
170EdgeElementForcesAndSourcesCore::UserDataOperator::getConn() {
174double EdgeElementForcesAndSourcesCore::UserDataOperator::getLength() {
178double EdgeElementForcesAndSourcesCore::UserDataOperator::getMeasure() {
183EdgeElementForcesAndSourcesCore::UserDataOperator::getDirection() {
188EdgeElementForcesAndSourcesCore::UserDataOperator::getCoords() {
193EdgeElementForcesAndSourcesCore::UserDataOperator::getTangentAtGaussPts() {
199EdgeElementForcesAndSourcesCore::UserDataOperator::getEdgeFE() {
204EdgeElementForcesAndSourcesCore::UserDataOperator::getFTensor1Direction() {
210EdgeElementForcesAndSourcesCore::UserDataOperator::getFTensor1Coords() {
211 double *ptr = &*getCoords().
data().begin();
218EdgeElementForcesAndSourcesCore::UserDataOperator::getFTensor1TangentAtGaussPts<
220 double *ptr = &*getTangentAtGaussPts().
data().begin();
227EdgeElementForcesAndSourcesCore::UserDataOperator::getFTensor1TangentAtGaussPts<
229 double *ptr = &*getTangentAtGaussPts().data().begin();
233auto EdgeElementForcesAndSourcesCore::UserDataOperator::getFTensor1Normal(
239 auto t_dir = getFTensor1Direction();
244auto EdgeElementForcesAndSourcesCore::UserDataOperator::
245 getFTensor1Normal() {
247 return getFTensor1Normal(t_normal);
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
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
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
DEPRECATED typedef EdgeElementForcesAndSourcesCore EdgeElementForcesAndSourcesCoreBase
Deprecated interface functions.
default operator for EDGE element
const EntityHandle * getConn()
get element connectivity
VectorDouble & getCoords()
get edge node coordinates
DEPRECATED FTensor::Tensor1< FTensor::PackPtr< double *, 3 >, 3 > getTensor1Coords()
auto getFTensor1Normal()
get edge normal NOTE: it should be used only in 2D analysis
FTensor::Tensor1< double, 3 > getFTensor1Direction()
MatrixDouble & getTangentAtGaussPts()
get tangent vector to edge curve at integration points
double getLength()
get edge length
VectorDouble & getDirection()
get edge direction
double getMeasure()
get measure of element
MoFEMErrorCode loopSideFaces(const string fe_name, FaceElementForcesAndSourcesCoreOnSide &fe_side)
const EdgeElementForcesAndSourcesCore * getEdgeFE()
get pointer to this finite element
FTensor::Tensor1< FTensor::PackPtr< double *, 3 >, DIM > getFTensor1TangentAtGaussPts()
Get tangent vector at integration points.
FTensor::Tensor1< FTensor::PackPtr< double *, 3 >, 3 > getFTensor1Coords()
get get coords at gauss points
MoFEMErrorCode setPtrFE(ForcesAndSourcesCore *ptr)
DEPRECATED MatrixDouble & getTangetAtGaussPts()
MatrixDouble tangentAtGaussPts
MoFEMErrorCode calculateEdgeDirection()
std::string meshPositionsFieldName
const EntityHandle * cOnn
MoFEMErrorCode setIntegrationPts()
MoFEMErrorCode calculateCoordsAtIntegrationPts()
MoFEMErrorCode operator()()
function is run for every finite element
Base face element used to integrate on skeleton.
ForcesAndSourcesCore * ptrFE
structure to get information form mofem into EntitiesFieldData