27#ifndef __VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__
28#define __VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__
30using namespace boost::numeric;
149 using VolumeElementForcesAndSourcesCore::UserDataOperator::UserDataOperator;
268const std::array<int, 4> &
273const std::array<int, 8> &
295VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getFaceFE()
const {
301VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getNormal() {
302 return getFaceFE()->nOrmal;
306VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent1() {
307 return getFaceFE()->tangentOne;
311VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent2() {
312 return getFaceFE()->tangentTwo;
316VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getVolumeFE()
const {
320int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getFaceSense()
325int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
326 getSkeletonSense()
const {
327 return getVolumeFE()->faceSense;
330auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
331 getFTensor1Normal() {
332 double *ptr = &*getNormal().data().begin();
336auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
337 getFTensor1Tangent1() {
338 double *ptr = &*getTangent1().data().begin();
342auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
343 getFTensor1Tangent2() {
344 double *ptr = &*getTangent2().data().begin();
348inline auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
349 getFTensor1NormalsAtGaussPts() {
350 double *ptr = &*getNormalsAtGaussPts().data().begin();
355int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
356 getFaceSideNumber()
const {
357 return getVolumeFE()->faceSideNumber;
360MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
361 getNormalsAtGaussPts() {
362 return getFaceFE()->normalsAtGaussPts;
365MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
366 getFaceCoordsAtGaussPts() {
367 return getFaceFE()->coordsAtGaussPts;
370bool VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getEdgeFace(
371 const int ee)
const {
372 constexpr bool edges_on_faces[6][4] = {{
true,
false,
false,
true},
373 {
false,
true,
false,
true},
374 {
false,
false,
true,
true},
375 {
true,
false,
true,
false},
376 {
true,
true,
false,
false},
377 {
false,
true,
true,
false}};
381ublas::matrix_row<MatrixDouble>
382VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getNormalsAtGaussPts(
384 return ublas::matrix_row<MatrixDouble>(getNormalsAtGaussPts(), gg);
400 VolumeElementForcesAndSourcesCoreOnSide;
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
DEPRECATED typedef VolumeElementForcesAndSourcesCoreOnSide VolumeElementForcesAndSourcesCoreOnSideBase
structure to get information from mofem into EntitiesFieldData
ForcesAndSourcesCore * sidePtrFE
Element to integrate on the sides.
default operator for TET element
auto getFTensor1Tangent1()
Get tangent one as tensor.
int getSkeletonSense() const
Get the skeleton sense.
MatrixDouble & getFaceCoordsAtGaussPts()
Get face coordinates at Gauss points.
bool getEdgeFace(const int ee) const
Query if an edge belongs to the current face.
VectorDouble & getNormal()
Get the face normal for this side element.
FaceElementForcesAndSourcesCore * getFaceFE() const
Access the face finite element Face element, execute side element, that is volume,...
int getFaceSideNumber() const
Get face side number with respect to the volume.
VectorDouble & getTangent2()
Get second triangle tangent.
MoFEMErrorCode setPtrFE(ForcesAndSourcesCore *ptr)
Assign base class pointer for the operator.
DEPRECATED int getFaceSense() const
Get face sense with respect to the volume.
MatrixDouble & getNormalsAtGaussPts()
If higher-order geometry is available, return normals at Gauss points.
VectorDouble & getTangent1()
Get first triangle tangent.
auto getFTensor1Normal()
Get normal as tensor.
auto getFTensor1Tangent2()
Get tangent two as tensor.
auto getFTensor1NormalsAtGaussPts()
Get normal at integration points.
VolumeElementForcesAndSourcesCoreOnSide * getVolumeFE() const
Access the owning volume finite element.
Base volume element used to integrate on skeleton.
DEPRECATED int getFaceSense() const
Sense face on volume.
MoFEMErrorCode operatorImpl()
Implementation detail for operator()
std::array< int, 4 > faceConnMap
const std::array< int, 8 > & getTetConnMap() const
Get face nodes mapped on volume.
int getFaceSideNumber() const
Face number on the volume.
const std::array< int, 4 > & getFaceConnMap() const
Get the face nodes mapped on the volume element.
std::array< int, 8 > tetConnMap
int nbNodesOnFace
Number of nodes on face.
int getRule(int order)
Compute quadrature rule index for a given polynomial order.
int getSkeletonSense() const
Sense face on volume.
MoFEMErrorCode operator()()
Execute user operator
int faceSense
Sense of face, could be 1 or -1.
int getOppositeNode() const
Get node on volume opposite to volume element.
bool operatorImplCalled
flag to check if operatorImpl was called
MoFEMErrorCode setGaussPts(int order)
Configure Gauss points for the element side.
int faceSideNumber
Face side number.
Volume finite element base.
VolumeElementForcesAndSourcesCore(Interface &m_field)