11#ifndef __VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__
12#define __VOLUMEELEMENTFORCESANDSOURCESCORE_ONSIDE_HPP__
14using namespace boost::numeric;
110 using VolumeElementForcesAndSourcesCore::UserDataOperator::UserDataOperator;
209const std::array<int, 4> &
214const std::array<int, 8> &
236VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getFaceFE()
243VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getNormal() {
244 return getFaceFE()->nOrmal;
248VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent1() {
249 return getFaceFE()->tangentOne;
253VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getTangent2() {
254 return getFaceFE()->tangentTwo;
258VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getVolumeFE()
263int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
264 getFaceSense()
const {
268int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
269 getSkeletonSense()
const {
270 return getVolumeFE()->faceSense;
273auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
274 getFTensor1Normal() {
275 double *ptr = &*getNormal().data().begin();
279auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
280 getFTensor1Tangent1() {
281 double *ptr = &*getTangent1().data().begin();
285auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
286 getFTensor1Tangent2() {
287 double *ptr = &*getTangent2().data().begin();
291inline auto VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
292 getFTensor1NormalsAtGaussPts() {
293 double *ptr = &*getNormalsAtGaussPts().data().begin();
298int VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
299 getFaceSideNumber()
const {
300 return getVolumeFE()->faceSideNumber;
303MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
304 getNormalsAtGaussPts() {
305 return getFaceFE()->normalsAtGaussPts;
308MatrixDouble &VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::
309 getFaceCoordsAtGaussPts() {
310 return getFaceFE()->coordsAtGaussPts;
313bool VolumeElementForcesAndSourcesCoreOnSide::UserDataOperator::getEdgeFace(
314 const int ee)
const {
315 constexpr bool edges_on_faces[6][4] = {{
true,
false,
false,
true},
316 {
false,
true,
false,
true},
317 {
false,
false,
true,
true},
318 {
true,
false,
true,
false},
319 {
true,
true,
false,
false},
320 {
false,
true,
true,
false}};
324ublas::matrix_row<MatrixDouble> VolumeElementForcesAndSourcesCoreOnSide::
325 UserDataOperator::getNormalsAtGaussPts(
const int gg) {
326 return ublas::matrix_row<MatrixDouble>(getNormalsAtGaussPts(), gg);
343 VolumeElementForcesAndSourcesCoreOnSide;
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
DEPRECATED typedef VolumeElementForcesAndSourcesCoreOnSide VolumeElementForcesAndSourcesCoreOnSideBase
structure to get information form mofem into EntitiesFieldData
ForcesAndSourcesCore * sidePtrFE
Element to integrate on the sides.
default operator for TET element
auto getFTensor1Tangent1()
get tangentOne as tensor
int getSkeletonSense() const
Get the skeleton sense.
MatrixDouble & getFaceCoordsAtGaussPts()
get face coordinates at Gauss pts.
bool getEdgeFace(const int ee) const
VectorDouble & getNormal()
FaceElementForcesAndSourcesCore * getFaceFE() const
int getFaceSideNumber() const
get face side number in respect to volume
VectorDouble & getTangent2()
get triangle tangent 2
MoFEMErrorCode setPtrFE(ForcesAndSourcesCore *ptr)
DEPRECATED int getFaceSense() const
get face sense in respect to volume
MatrixDouble & getNormalsAtGaussPts()
if higher order geometry return normals at Gauss pts.
VectorDouble & getTangent1()
get triangle tangent 1
auto getFTensor1Normal()
get normal as tensor
auto getFTensor1Tangent2()
get tangentTwo as tensor
auto getFTensor1NormalsAtGaussPts()
get normal at integration points
VolumeElementForcesAndSourcesCoreOnSide * getVolumeFE() const
Base volume element used to integrate on skeleton.
DEPRECATED int getFaceSense() const
Sense face on volume.
MoFEMErrorCode operatorImpl()
std::array< int, 4 > faceConnMap
const std::array< int, 8 > & getTetConnMap() const
Get face nodes maped on volume.
int getFaceSideNumber() const
Face number on the volume.
const std::array< int, 4 > & getFaceConnMap() const
Get the face nodes mapped on volume element.
std::array< int, 8 > tetConnMap
int nbNodesOnFace
Number of nodes on face.
int getSkeletonSense() const
Sense face on volume.
MoFEMErrorCode operator()()
Get side and sense and call operator from derived class.
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)
int faceSideNumber
Face side number.
Volume finite element base.
VolumeElementForcesAndSourcesCore(Interface &m_field)