v0.14.0
Loading...
Searching...
No Matches
Public Member Functions | Static Public Member Functions | Public Attributes | List of all members
MoFEM::Tools Struct Reference

Auxiliary tools. More...

#include <src/interfaces/Tools.hpp>

Inheritance diagram for MoFEM::Tools:
[legend]
Collaboration diagram for MoFEM::Tools:
[legend]

Public Member Functions

MoFEMErrorCode query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const
 
 Tools (const MoFEM::Core &core)
 
template<>
MoFEMErrorCode getLocalCoordinatesOnReferenceTriNodeTri (const double *elem_coords, const double *global_coords, const int nb_nodes, double *local_coords)
 
template<>
MoFEMErrorCode getLocalCoordinatesOnReferenceTriNodeTri (const std::complex< double > *elem_coords, const std::complex< double > *global_coords, const int nb_nodes, std::complex< double > *local_coords)
 
- Public Member Functions inherited from MoFEM::UnknownInterface
virtual MoFEMErrorCode query_interface (boost::typeindex::type_index type_index, UnknownInterface **iface) const =0
 
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
 

Static Public Member Functions

static MoFEMErrorCode outerProductOfEdgeIntegrationPtsForQuad (MatrixDouble &pts, const int edge0, const int edge1)
 
static MoFEMErrorCode outerProductOfEdgeIntegrationPtsForHex (MatrixDouble &pts, const int edge0, const int edge1, const int edge2)
 
- Static Public Member Functions inherited from MoFEM::UnknownInterface
static MoFEMErrorCode getLibVersion (Version &version)
 Get library version. More...
 
static MoFEMErrorCode getFileVersion (moab::Interface &moab, Version &version)
 Get database major version. More...
 
static MoFEMErrorCode setFileVersion (moab::Interface &moab, Version version=Version(MoFEM_VERSION_MAJOR, MoFEM_VERSION_MINOR, MoFEM_VERSION_BUILD))
 Get database major version. More...
 
static MoFEMErrorCode getInterfaceVersion (Version &version)
 Get database major version. More...
 

Public Attributes

MoFEM::CorecOre
 

Computational

enum  SEGMENT_MIN_DISTANCE {
  SOLUTION_EXIST , SEGMENT_ONE_IS_POINT , SEGMENT_TWO_IS_POINT , SEGMENT_TWO_AND_TWO_ARE_POINT ,
  NO_SOLUTION
}
 
static constexpr double shapeFunMBEDGE0At00 = N_MBEDGE0(0)
 
static constexpr double shapeFunMBEDGE1At00 = N_MBEDGE1(0)
 
static constexpr std::array< double, 2 > shapeFunMBEDGEAt00
 Array of shape function at zero local point on reference element. More...
 
static constexpr double diffN_MBEDGE0x = diffN_MBEDGE0
 
static constexpr double diffN_MBEDGE1x = diffN_MBEDGE1
 
static constexpr std::array< double, 2 > diffShapeFunMBEDGE
 
static constexpr double diffShapeFunMBTRI0x
 derivative of triangle shape function More...
 
static constexpr double diffShapeFunMBTRI0y
 derivative of triangle shape function More...
 
static constexpr double diffShapeFunMBTRI1x
 derivative of triangle shape function More...
 
static constexpr double diffShapeFunMBTRI1y
 derivative of triangle shape function More...
 
static constexpr double diffShapeFunMBTRI2x
 derivative of triangle shape function More...
 
static constexpr double diffShapeFunMBTRI2y
 derivative of triangle shape function More...
 
static constexpr std::array< double, 6 > diffShapeFunMBTRI
 
static constexpr double shapeFunMBTRI0At00 = N_MBTRI0(0, 0)
 
static constexpr double shapeFunMBTRI1At00 = N_MBTRI1(0, 0)
 
static constexpr double shapeFunMBTRI2At00 = N_MBTRI2(0, 0)
 
static constexpr std::array< double, 3 > shapeFunMBTRIAt00
 Array of shape function at zero local point on reference element. More...
 
static constexpr double diffShapeFunMBQUADAtCenter0x
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter0y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter1x
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter1y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter2x
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter2y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter3x
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBQUADAtCenter3y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter0x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter0y
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter0z
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter1x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter1y
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter1z
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter2x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter2y
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter2z
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter3x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter3y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter3z
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter4x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter4y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter4z
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter5x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter5y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter5z
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter6x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter6y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter6z
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter7x
 derivative of HEX shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter7y
 derivative of quad shape function More...
 
static constexpr double diffShapeFunMBHEXAtCenter7z
 derivative of quad shape function More...
 
static constexpr std::array< double, 8 > diffShapeFunMBQUADAtCenter
 
static constexpr std::array< double, 24 > diffShapeFunMBHEXAtCenter
 
static constexpr double diffShapeFunMBTET0x
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET0y
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET0z
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET1x
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET1y
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET1z
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET2x
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET2y
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET2z
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET3x
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET3y
 derivative of tetrahedral shape function More...
 
static constexpr double diffShapeFunMBTET3z
 derivative of tetrahedral shape function More...
 
static constexpr std::array< double, 12 > diffShapeFunMBTET
 
static constexpr double shapeFunMBTET0At000 = N_MBTET0(0, 0, 0)
 
static constexpr double shapeFunMBTET1At000 = N_MBTET1(0, 0, 0)
 
static constexpr double shapeFunMBTET2At000 = N_MBTET2(0, 0, 0)
 
static constexpr double shapeFunMBTET3At000 = N_MBTET3(0, 0, 0)
 
static constexpr double shapeFunMBTET0AtOneThird
 
static constexpr double shapeFunMBTET1AtOneThird
 
static constexpr double shapeFunMBTET2AtOneThird
 
static constexpr double shapeFunMBTET3AtOneThird
 
static constexpr std::array< double, 4 > shapeFunMBTETAt000
 Array of shape function at zero local point on reference element. More...
 
static constexpr std::array< double, 4 > shapeFunMBTETAtOneThird
 Array of shape function at center on reference element. More...
 
MoFEMErrorCode minTetsQuality (const Range &tets, double &min_quality, Tag th=nullptr, boost::function< double(double, double)> f=[](double a, double b) -> double { return std::min(a, b);})
 calculate minimal quality of tetrahedra in range More...
 
MoFEMErrorCode getTetsWithQuality (Range &out_tets, const Range &tets, Tag th=nullptr, boost::function< bool(double)> f=[](double q) -> bool { if(q<=0) return true;else return false;})
 Get the Tets With Quality. More...
 
MoFEMErrorCode writeTetsWithQuality (const char *file_name, const char *file_type, const char *options, const Range &tets, Tag th=nullptr, boost::function< bool(double)> f=[](double q) -> bool { if(q<=0) return true;else return false;})
 Write file with tetrahedral of given quality. More...
 
MoFEMErrorCode getTriNormal (const EntityHandle tri, double *normal) const
 Get triangle normal. More...
 
double getTriArea (const EntityHandle tri) const
 Get triangle area. More...
 
double getEdgeLength (const EntityHandle edge)
 Get edge length. More...
 
MoFEMErrorCode findMinDistanceFromTheEdges (const double *v_ptr, const int nb, Range edges, double *min_dist_ptr, double *o_ptr=nullptr, EntityHandle *o_segments=nullptr) const
 Find minimal distance to edges. More...
 
static double volumeLengthQuality (const double *coords)
 Calculate tetrahedron volume length quality. More...
 
static double tetVolume (const double *coords)
 Calculate volume of tetrahedron. More...
 
static double shapeFunMBEDGE0 (const double x)
 
static double shapeFunMBEDGE1 (const double x)
 
template<int LDB = 1>
static MoFEMErrorCode shapeFunMBEDGE (double *shape, const double *ksi, const int nb)
 Calculate shape functions on edge. More...
 
static double shapeFunMBTRI0 (const double x, const double y)
 
static double shapeFunMBTRI1 (const double x, const double y)
 
static double shapeFunMBTRI2 (const double x, const double y)
 
template<int LDB = 1>
static MoFEMErrorCode shapeFunMBTRI (double *shape, const double *ksi, const double *eta, const int nb)
 Calculate shape functions on triangle. More...
 
static double shapeFunMBTET0 (const double x, const double y, const double z)
 
static double shapeFunMBTET1 (const double x, const double y, const double z)
 
static double shapeFunMBTET2 (const double x, const double y, const double z)
 
static double shapeFunMBTET3 (const double x, const double y, const double z)
 
template<int LDB = 1>
static MoFEMErrorCode shapeFunMBTET (double *shape, const double *ksi, const double *eta, const double *zeta, const double nb)
 Calculate shape functions on tetrahedron. More...
 
static MoFEMErrorCode getLocalCoordinatesOnReferenceFourNodeTet (const double *elem_coords, const double *glob_coords, const int nb_nodes, double *local_coords)
 Get the local coordinates on reference four node tet object. More...
 
template<typename T >
static MoFEMErrorCode getLocalCoordinatesOnReferenceTriNodeTri (const T *elem_coords, const T *glob_coords, const int nb_nodes, T *local_coords)
 Get the local coordinates on reference three node tri object. More...
 
static MoFEMErrorCode getLocalCoordinatesOnReferenceEdgeNodeEdge (const double *elem_coords, const double *glob_coords, const int nb_nodes, double *local_coords)
 Get the local coordinates on reference four node tet object. More...
 
static MoFEMErrorCode checkIfPointIsInTet (const double tet_coords[], const double global_coord[], const double tol, bool &result)
 Check of point is in tetrahedral. More...
 
static MoFEMErrorCode getTriNormal (const double *coords, double *normal, double *d_normal=nullptr)
 Get the Tri Normal objectGet triangle normal. More...
 
static double getEdgeLength (const double *edge_coords)
 Get edge length. More...
 
static SEGMENT_MIN_DISTANCE minDistancePointFromOnSegment (const double *w_ptr, const double *v_ptr, const double *p_ptr, double *const t_ptr=nullptr)
 Find closet point on the segment from the point. More...
 
static SEGMENT_MIN_DISTANCE minDistanceFromSegments (const double *w_ptr, const double *v_ptr, const double *k_ptr, const double *l_ptr, double *const tvw_ptr=nullptr, double *const tlk_ptr=nullptr)
 Find points on two segments in closest distance. More...
 

Debugging

MoFEMErrorCode checkVectorForNotANumber (const Problem *prb_ptr, const RowColData row_or_col, Vec v)
 Print all DOFs for which element of vector is not a number. More...
 

Detailed Description

Auxiliary tools.

Definition at line 19 of file Tools.hpp.

Member Enumeration Documentation

◆ SEGMENT_MIN_DISTANCE

Enumerator
SOLUTION_EXIST 
SEGMENT_ONE_IS_POINT 
SEGMENT_TWO_IS_POINT 
SEGMENT_TWO_AND_TWO_ARE_POINT 
NO_SOLUTION 

Definition at line 514 of file Tools.hpp.

Constructor & Destructor Documentation

◆ Tools()

MoFEM::Tools::Tools ( const MoFEM::Core core)
inline

Definition at line 25 of file Tools.hpp.

25: cOre(const_cast<MoFEM::Core &>(core)) {}
Core (interface) class.
Definition: Core.hpp:82
MoFEM::Core & cOre
Definition: Tools.hpp:24

Member Function Documentation

◆ checkIfPointIsInTet()

MoFEMErrorCode MoFEM::Tools::checkIfPointIsInTet ( const double  tet_coords[],
const double  global_coord[],
const double  tol,
bool result 
)
static

Check of point is in tetrahedral.

Parameters
tet_coords
global_coord
tol
result
Returns
MoFEMErrorCode

Definition at line 289 of file Tools.cpp.

291 {
292 double loc_coord[] = {0, 0, 0};
293 double N[4], diffN[12];
295 CHKERR ShapeDiffMBTET(diffN);
296 CHKERR ShapeMBTET(N, &loc_coord[0], &loc_coord[1], &loc_coord[2], 1);
297 CHKERR ShapeMBTET_inverse(N, diffN, tet_coords, global_coord, loc_coord);
298 CHKERR ShapeMBTET(N, &loc_coord[0], &loc_coord[1], &loc_coord[2], 1);
299 result = true;
300 for (int n = 0; n != 4; ++n) {
301 if (N[n] < -tol || (N[n] - 1) > tol) {
302 result = false;
303 break;
304 }
305 }
307}
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:346
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:416
#define CHKERR
Inline error check.
Definition: definitions.h:535
PetscErrorCode ShapeDiffMBTET(double *diffN)
calculate derivatives of shape functions
Definition: fem_tools.c:319
PetscErrorCode ShapeMBTET_inverse(double *N, double *diffN, const double *elem_coords, const double *glob_coords, double *loc_coords)
calculate local coordinates for given global coordinates
Definition: fem_tools.c:335
PetscErrorCode ShapeMBTET(double *N, const double *G_X, const double *G_Y, const double *G_Z, int DIM)
calculate shape functions
Definition: fem_tools.c:306
FTensor::Index< 'n', SPACE_DIM > n
double tol
const int N
Definition: speed_test.cpp:3

◆ checkVectorForNotANumber()

MoFEMErrorCode MoFEM::Tools::checkVectorForNotANumber ( const Problem prb_ptr,
const RowColData  row_or_col,
Vec  v 
)

Print all DOFs for which element of vector is not a number.

Definition at line 309 of file Tools.cpp.

311 {
313 int loc_size;
314 CHKERR VecGetLocalSize(v, &loc_size);
315 int prb_loc_size = 0;
316 boost::shared_ptr<NumeredDofEntity_multiIndex> prb_dofs;
317 switch (row_or_col) {
318 case ROW:
319 prb_loc_size = prb_ptr->getNbLocalDofsRow();
320 prb_dofs = prb_ptr->getNumeredRowDofsPtr();
321 break;
322 case COL:
323 prb_loc_size = prb_ptr->getNbLocalDofsCol();
324 prb_dofs = prb_ptr->getNumeredColDofsPtr();
325 break;
326 break;
327 default:
328 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
329 "Wrong argument, row_or_col should be row or column");
330 }
331 if (loc_size != prb_loc_size) {
332 SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
333 "Inconsistent size of vector and problem %d != %d", loc_size,
334 prb_loc_size);
335 }
336 const double *a;
337 CHKERR VecGetArrayRead(v, &a);
338 MPI_Comm comm = PetscObjectComm((PetscObject)v);
339 for (int ii = 0; ii != loc_size; ++ii) {
340 if (!boost::math::isfinite(a[ii])) {
341 NumeredDofEntityByLocalIdx::iterator dit =
342 prb_dofs->get<PetscLocalIdx_mi_tag>().find(ii);
343 std::ostringstream ss;
344 ss << "Not a number " << a[ii] << " on dof: " << endl
345 << **dit << endl
346 << endl;
347 PetscSynchronizedPrintf(comm, "%s", ss.str().c_str());
348 }
349 }
350 CHKERR VecRestoreArrayRead(v, &a);
351 PetscSynchronizedFlush(comm, PETSC_STDOUT);
353}
constexpr double a
@ COL
Definition: definitions.h:123
@ ROW
Definition: definitions.h:123
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
const double v
phase velocity of light in medium (cm/ns)

◆ findMinDistanceFromTheEdges()

MoFEMErrorCode MoFEM::Tools::findMinDistanceFromTheEdges ( const double v_ptr,
const int  nb,
Range  edges,
double min_dist_ptr,
double o_ptr = nullptr,
EntityHandle o_segments = nullptr 
) const

Find minimal distance to edges.

Note
Finding only edges with have smaller distance than distance set on the input by min_dist_ptr
Parameters
v_ptrpoint coordinates
nbnb points
edgesrange of edges
min_dist_ptron return minimal distance, on input starting distance
o_ptrcoordinates of the point on edge
o_segmentsclosest segments
Returns
MoFEMErrorCode

Definition at line 537 of file Tools.cpp.

539 {
540 MoFEM::Interface &m_field = cOre;
541 moab::Interface &moab(m_field.get_moab());
543
545
546 auto get_point = [i](auto &t_w, auto &t_delta, auto t) {
548 t = std::max(0., std::min(1., t));
549 t_p(i) = t_w(i) + t * t_delta(i);
550 return t_p;
551 };
552
553 auto get_distance = [i](auto &t_p, auto &t_n) {
554 FTensor::Tensor1<double, 3> t_dist_vector;
555 t_dist_vector(i) = t_p(i) - t_n(i);
556 return sqrt(t_dist_vector(i) * t_dist_vector(i));
557 };
558
559 for (auto e : edges) {
560
561 int num_nodes;
562 const EntityHandle *conn_fixed;
563 CHKERR moab.get_connectivity(e, conn_fixed, num_nodes, true);
564 VectorDouble6 coords_fixed(6);
565 CHKERR moab.get_coords(conn_fixed, num_nodes, &coords_fixed[0]);
567 &coords_fixed[0], &coords_fixed[1], &coords_fixed[2]);
569 &coords_fixed[3], &coords_fixed[4], &coords_fixed[5]);
570
571 FTensor::Tensor1<double, 3> t_edge_delta;
572 t_edge_delta(i) = t_f1(i) - t_f0(i);
573
575 v_ptr, v_ptr + 1, v_ptr + 2);
577 o_ptr, o_ptr + 1, o_ptr + 2);
578 FTensor::Tensor0<FTensor::PackPtr<double *, 1>> t_min_dist(min_dist_ptr);
579
580 EntityHandle *colsest_segment_it = nullptr;
581 if (o_segments)
582 colsest_segment_it = o_segments;
583
584 for (int n = 0; n != nb; ++n) {
585
586 double t;
587 if (Tools::minDistancePointFromOnSegment(&t_f0(0), &t_f1(0), &t_n(0),
589 auto t_p = get_point(t_f0, t_edge_delta, t);
590 auto dist_n = get_distance(t_p, t_n);
591 if (dist_n < t_min_dist || t_min_dist < 0) {
592 t_min_dist = dist_n;
593 if (o_ptr)
594 t_min_coords(i) = t_p(i);
595 if (o_segments)
596 *colsest_segment_it = e;
597 }
598 }
599
600 ++t_n;
601 ++t_min_dist;
602 if (o_ptr)
603 ++t_min_coords;
604 if (o_segments)
605 ++colsest_segment_it;
606 }
607 }
608
610}
FTensor::Index< 'i', SPACE_DIM > i
VectorBoundedArray< double, 6 > VectorDouble6
Definition: Types.hpp:95
constexpr double t
plate stiffness
Definition: plate.cpp:59
virtual moab::Interface & get_moab()=0
Deprecated interface functions.
static SEGMENT_MIN_DISTANCE minDistancePointFromOnSegment(const double *w_ptr, const double *v_ptr, const double *p_ptr, double *const t_ptr=nullptr)
Find closet point on the segment from the point.
Definition: Tools.cpp:448

◆ getEdgeLength() [1/2]

double MoFEM::Tools::getEdgeLength ( const double edge_coords)
static

Get edge length.

Parameters
edge_coords
Returns
double

Definition at line 417 of file Tools.cpp.

417 {
419 edge_coords[2]);
421 edge_coords[5]);
423 t_coords_n0(i) -= t_coords_n1(i);
424 return sqrt(t_coords_n0(i) * t_coords_n0(i));
425}
static const double edge_coords[6][6]

◆ getEdgeLength() [2/2]

double MoFEM::Tools::getEdgeLength ( const EntityHandle  edge)

Get edge length.

Parameters
edge
Returns
double

Definition at line 427 of file Tools.cpp.

427 {
428 MoFEM::Interface &m_field = cOre;
429 moab::Interface &moab(m_field.get_moab());
430 auto get_edge_coords = [edge, &moab](double *const coords) {
432 if (type_from_handle(edge) != MBEDGE) {
433 SETERRQ(PETSC_COMM_SELF, MOFEM_INVALID_DATA, "Works only for edge");
434 }
435 const EntityHandle *conn;
436 int num_nodes;
437 CHKERR moab.get_connectivity(edge, conn, num_nodes, true);
438 CHKERR moab.get_coords(conn, 2, coords);
440 };
441 double coords[6];
442 ierr = get_edge_coords(coords);
443 CHKERRABORT(PETSC_COMM_SELF, ierr);
444 return getEdgeLength(coords);
445}
@ MOFEM_INVALID_DATA
Definition: definitions.h:36
static MoFEMErrorCodeGeneric< PetscErrorCode > ierr
Definition: Exceptions.hpp:76
auto type_from_handle(const EntityHandle h)
get type from entity handle
Definition: Templates.hpp:1869
static double getEdgeLength(const double *edge_coords)
Get edge length.
Definition: Tools.cpp:417

◆ getLocalCoordinatesOnReferenceEdgeNodeEdge()

MoFEMErrorCode MoFEM::Tools::getLocalCoordinatesOnReferenceEdgeNodeEdge ( const double elem_coords,
const double glob_coords,
const int  nb_nodes,
double local_coords 
)
static

Get the local coordinates on reference four node tet object.

MatrixDouble elem_coords(4, 3);
// Set nodal coordinates
MatrixDouble global_coords(5, 3);
// Set global coordinates
MatrixDouble local_coords(global_coords.size1(), 3);
&elem_coords(0, 0), &global_coords(0, 0), global_coords.size1(),
&local_coords(0, 0))
static MoFEMErrorCode getLocalCoordinatesOnReferenceEdgeNodeEdge(const double *elem_coords, const double *glob_coords, const int nb_nodes, double *local_coords)
Get the local coordinates on reference four node tet object.
Definition: Tools.cpp:205
Parameters
elem_coordsGlobal element node coordinates
glob_coordsGlobale coordinates
nb_nodesNumber of points
local_coordsResult
Returns
MoFEMErrorCode

Definition at line 205 of file Tools.cpp.

207 {
208
211
213 &elem_coords[0], &elem_coords[3], &elem_coords[6]};
214
215 FTensor::Tensor1<double, 3> t_coords_at_0;
216 // Build matrix and get coordinates of zero point
217 // ii - global coordinates
219 for (auto ii : {0, 1, 2}) {
220 t_a(ii) = diffShapeFunMBEDGE[0] * t_elem_coords(0) +
221 diffShapeFunMBEDGE[1] * t_elem_coords(1);
222 t_coords_at_0(ii) = shapeFunMBEDGEAt00[0] * t_elem_coords(0) +
223 shapeFunMBEDGEAt00[1] * t_elem_coords(1);
224 ++t_elem_coords;
225 }
226
228 &global_coords[0], &global_coords[1], &global_coords[2]};
230 &local_coords[0]};
231
232 const double b = t_a(i3) * t_a(i3);
233 const double inv_b = 1 / b;
234
235 // Calculate right hand side
236 for (int ii = 0; ii != nb_nodes; ++ii) {
237 t_local_coords =
238 inv_b * (t_a(i3) * (t_global_coords(i3) - t_coords_at_0(i3)));
239 ++t_local_coords;
240 ++t_global_coords;
241 }
242
244}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:447
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:440
static constexpr std::array< double, 2 > shapeFunMBEDGEAt00
Array of shape function at zero local point on reference element.
Definition: Tools.hpp:62
static constexpr std::array< double, 2 > diffShapeFunMBEDGE
Definition: Tools.hpp:68

◆ getLocalCoordinatesOnReferenceFourNodeTet()

MoFEMErrorCode MoFEM::Tools::getLocalCoordinatesOnReferenceFourNodeTet ( const double elem_coords,
const double glob_coords,
const int  nb_nodes,
double local_coords 
)
static

Get the local coordinates on reference four node tet object.

MatrixDouble elem_coords(4, 3);
// Set nodal coordinates
MatrixDouble global_coords(5, 3);
// Set global coordinates
MatrixDouble local_coords(global_coords.size1(), 3);
&elem_coords(0, 0), &global_coords(0, 0), global_coords.size1(),
&local_coords(0, 0))
static MoFEMErrorCode getLocalCoordinatesOnReferenceFourNodeTet(const double *elem_coords, const double *glob_coords, const int nb_nodes, double *local_coords)
Get the local coordinates on reference four node tet object.
Definition: Tools.cpp:88
Parameters
elem_coordsGlobal element node coordinates
glob_coordsGlobale coordinates
nb_nodesNumber of points
local_coordsResult
Returns
MoFEMErrorCode

Definition at line 88 of file Tools.cpp.

90 {
93
95 &elem_coords[0], &elem_coords[3], &elem_coords[6], &elem_coords[9]};
96
100 FTensor::Tensor1<double, 3> t_coords_at_0;
101
102 // Build matrix and get coordinates of zero point
103 // ii - global coordinates
104 // jj - local derivatives
105 MatrixDouble3by3 a(3, 3);
106 for (auto ii : {0, 1, 2}) {
110 for (auto jj : {0, 1, 2}) {
111 a(jj, ii) = t_diff(i) * t_elem_coords(i);
112 ++t_diff;
113 }
114 t_coords_at_0(ii) = t_n(i) * t_elem_coords(i);
115 ++t_elem_coords;
116 }
117
119 &global_coords[0], &global_coords[1], &global_coords[2]};
121 &local_coords[0], &local_coords[1], &local_coords[2]};
122
123 // Calculate right hand side
125 for (int ii = 0; ii != nb_nodes; ++ii) {
126 t_local_coords(j) = t_global_coords(j) - t_coords_at_0(j);
127 ++t_local_coords;
128 ++t_global_coords;
129 }
130
131 // Solve problem
132 int IPIV[3];
133 int info = lapack_dgesv(3, nb_nodes, &a(0, 0), 3, IPIV, local_coords, 3);
134 if (info != 0)
135 SETERRQ1(PETSC_COMM_SELF, 1, "info == %d", info);
136
138}
static __CLPK_integer lapack_dgesv(__CLPK_integer n, __CLPK_integer nrhs, __CLPK_doublereal *a, __CLPK_integer lda, __CLPK_integer *ipiv, __CLPK_doublereal *b, __CLPK_integer ldb)
Definition: lapack_wrap.h:176
FTensor::Index< 'j', 3 > j
MatrixBoundedArray< double, 9 > MatrixDouble3by3
Definition: Types.hpp:105
static constexpr std::array< double, 4 > shapeFunMBTETAt000
Array of shape function at zero local point on reference element.
Definition: Tools.hpp:330
static constexpr std::array< double, 12 > diffShapeFunMBTET
Definition: Tools.hpp:271

◆ getLocalCoordinatesOnReferenceTriNodeTri() [1/3]

template<>
MoFEMErrorCode MoFEM::Tools::getLocalCoordinatesOnReferenceTriNodeTri ( const double elem_coords,
const double global_coords,
const int  nb_nodes,
double local_coords 
)

Definition at line 189 of file Tools.cpp.

191 {
192 return getLocalCoordinatesOnReferenceTriNodeTriImpl<double>(
193 elem_coords, global_coords, nb_nodes, local_coords);
194}

◆ getLocalCoordinatesOnReferenceTriNodeTri() [2/3]

template<>
MoFEMErrorCode MoFEM::Tools::getLocalCoordinatesOnReferenceTriNodeTri ( const std::complex< double > *  elem_coords,
const std::complex< double > *  global_coords,
const int  nb_nodes,
std::complex< double > *  local_coords 
)

Definition at line 197 of file Tools.cpp.

200 {
201 return getLocalCoordinatesOnReferenceTriNodeTriImpl<std::complex<double>>(
202 elem_coords, global_coords, nb_nodes, local_coords);
203}

◆ getLocalCoordinatesOnReferenceTriNodeTri() [3/3]

template<typename T >
static MoFEMErrorCode MoFEM::Tools::getLocalCoordinatesOnReferenceTriNodeTri ( const T elem_coords,
const T glob_coords,
const int  nb_nodes,
T local_coords 
)
static

Get the local coordinates on reference three node tri object.

MatrixDouble elem_coords(4, 3);
// Set nodal coordinates
MatrixDouble global_coords(5, 3);
// Set global coordinates
MatrixDouble local_coords(global_coords.size1(), 3);
&elem_coords(0, 0), &global_coords(0, 0), global_coords.size1(),
&local_coords(0, 0))
Parameters
elem_coordsGlobal element node coordinates
glob_coordsGlobale coordinates
nb_nodesNumber of points
local_coordsResult
d_elem_coordsDerivative of local coordinates
d_global_coords
Returns
MoFEMErrorCode

◆ getTetsWithQuality()

MoFEMErrorCode MoFEM::Tools::getTetsWithQuality ( Range out_tets,
const Range tets,
Tag  th = nullptr,
boost::function< bool(double)>  f = [](double q) -> bool { if (q <= 0) return true; else return false; } 
)

Get the Tets With Quality.

Parameters
out_tets
tets
th
f
Returns
MoFEMErrorCode

Definition at line 246 of file Tools.cpp.

248 {
249 MoFEM::Interface &m_field = cOre;
250 moab::Interface &moab(m_field.get_moab());
252 Range to_write;
253 const EntityHandle *conn;
254 int num_nodes;
255 double coords[12];
256 for (auto tet : tets) {
257 CHKERR m_field.get_moab().get_connectivity(tet, conn, num_nodes, true);
258 if (th) {
259 CHKERR moab.tag_get_data(th, conn, num_nodes, coords);
260 } else {
261 CHKERR moab.get_coords(conn, num_nodes, coords);
262 }
263 double q = Tools::volumeLengthQuality(coords);
264 if (f(q)) {
265 out_tets.insert(tet);
266 }
267 }
269}
static double volumeLengthQuality(const double *coords)
Calculate tetrahedron volume length quality.
Definition: Tools.cpp:15

◆ getTriArea()

double MoFEM::Tools::getTriArea ( const EntityHandle  tri) const

Get triangle area.

Parameters
tri
Returns
double

Definition at line 410 of file Tools.cpp.

410 {
413 CHK_THROW_MESSAGE(getTriNormal(tri, &t_normal(0)), "calculate area");
414 return sqrt(t_normal(i) * t_normal(i)) * 0.5;
415}
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
Definition: definitions.h:595
static MoFEMErrorCode getTriNormal(const double *coords, double *normal, double *d_normal=nullptr)
Get the Tri Normal objectGet triangle normal.
Definition: Tools.cpp:355

◆ getTriNormal() [1/2]

MoFEMErrorCode MoFEM::Tools::getTriNormal ( const double coords,
double normal,
double d_normal = nullptr 
)
static

Get the Tri Normal objectGet triangle normal.

Parameters
coords
normal
d_normalderbiative, if pointer is null, derbiative is not calculated
Returns
MoFEMErrorCode

Definition at line 355 of file Tools.cpp.

356 {
367 auto diff_ptr = Tools::diffShapeFunMBTRI.data();
368 auto t_diff_tensor = getFTensor2FromPtr<3, 2>(const_cast<double *>(diff_ptr));
369 auto t_coords = getFTensor2FromPtr<3, 3>(const_cast<double *>(coords));
371 t_tangent(i, J) = t_coords(n, i) * t_diff_tensor(n, J);
372 auto t_normal = getFTensor1FromPtr<3>(normal);
373 t_normal(j) =
374 FTensor::levi_civita(i, j, k) * t_tangent(k, N0) * t_tangent(i, N1);
375 if (d_normal) {
376 constexpr auto t_kd = FTensor::Kronecker_Delta<int>();
378 t_d_coords(i, j, k, n) = t_kd(i, k) * t_kd(j, n);
380 t_d_tangent(i, k, l, J) = t_d_coords(n, i, k, l) * t_diff_tensor(n, J);
381 auto t_d_normal = getFTensor3FromPtr<3, 3, 3>(d_normal);
382 t_d_normal(j, m, n) = (FTensor::levi_civita(i, j, k) * t_tangent(i, N1)) *
383 t_d_tangent(k, m, n, N0)
384
385 +
386
387 (FTensor::levi_civita(i, j, k) * t_tangent(k, N0)) *
388 t_d_tangent(i, m, n, N1);
389 }
391}
static Index< 'J', 3 > J
static Number< 1 > N1
static Number< 0 > N0
Kronecker Delta class.
FTensor::Index< 'm', SPACE_DIM > m
constexpr auto t_kd
FTensor::Index< 'l', 3 > l
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
FTensor::Tensor3< FTensor::PackPtr< double *, 27 >, 3, 3, 3 > getFTensor3FromPtr< 3, 3, 3 >(double *ptr)
Definition: Templates.hpp:974
static constexpr std::array< double, 6 > diffShapeFunMBTRI
Definition: Tools.hpp:104

◆ getTriNormal() [2/2]

MoFEMErrorCode MoFEM::Tools::getTriNormal ( const EntityHandle  tri,
double normal 
) const

Get triangle normal.

Parameters
tri
normal
Returns
MoFEMErrorCode

Definition at line 393 of file Tools.cpp.

394 {
395 MoFEM::Interface &m_field = cOre;
396 moab::Interface &moab(m_field.get_moab());
398 if (type_from_handle(tri) != MBTRI) {
399 SETERRQ(PETSC_COMM_SELF, MOFEM_INVALID_DATA, "Works only for triangle");
400 }
401 const EntityHandle *conn;
402 int num_nodes;
403 double coords[9];
404 CHKERR moab.get_connectivity(tri, conn, num_nodes, true);
405 CHKERR moab.get_coords(conn, num_nodes, coords);
406 CHKERR getTriNormal(coords, normal);
408}

◆ minDistanceFromSegments()

Tools::SEGMENT_MIN_DISTANCE MoFEM::Tools::minDistanceFromSegments ( const double w_ptr,
const double v_ptr,
const double k_ptr,
const double l_ptr,
double *const  tvw_ptr = nullptr,
double *const  tlk_ptr = nullptr 
)
static

Find points on two segments in closest distance.

Parameters
w_ptr
v_ptr
k_ptr
l_ptr
tvw_ptr
tlk_ptr
Returns
SEGMENT_MIN_DISTANCE
Note
If tvwk or tlk are outside bound [0,-1], it means that points are on the lines beyond segments, respectively for segment vw and lk.

Definition at line 471 of file Tools.cpp.

473 {
474
476 FTensor::Tensor1<const double *, 3> t_w(&w_ptr[0], &w_ptr[1], &w_ptr[2]);
477 FTensor::Tensor1<const double *, 3> t_v(&v_ptr[0], &v_ptr[1], &v_ptr[2]);
478 FTensor::Tensor1<const double *, 3> t_k(&k_ptr[0], &k_ptr[1], &k_ptr[2]);
479 FTensor::Tensor1<const double *, 3> t_l(&l_ptr[0], &l_ptr[1], &l_ptr[2]);
480
481 // First segnent is a point
483 t_vw(i) = t_v(i) - t_w(i);
484 double dot_vw = t_vw(i) * t_vw(i);
485 if (std::abs(dot_vw) < std::numeric_limits<double>::epsilon()) {
486 if (tvw_ptr)
487 *tvw_ptr = 0;
488 if (minDistancePointFromOnSegment(k_ptr, l_ptr, w_ptr, tlk_ptr) ==
491 else
493 }
494
495 // Second segment is a point
497 t_lk(i) = t_l(i) - t_k(i);
498 double dot_lk = t_lk(i) * t_lk(i);
499 if (std::abs(dot_lk) < std::numeric_limits<double>::epsilon()) {
500 if (tlk_ptr)
501 *tlk_ptr = 0;
502 if (minDistancePointFromOnSegment(w_ptr, v_ptr, k_ptr, tvw_ptr) ==
505 else
507 }
508
509 const double a = t_vw(i) * t_vw(i);
510 const double b = -t_vw(i) * t_lk(i);
511 const double c = t_lk(i) * t_lk(i);
512
513 const double det = a * c - b * b;
514 if (std::abs(det) < std::numeric_limits<double>::epsilon()) {
515
516 return NO_SOLUTION;
517
518 } else {
519
521 t_wk(i) = t_w(i) - t_k(i);
522
523 const double ft0 = t_vw(i) * t_wk(i);
524 const double ft1 = -t_lk(i) * t_wk(i);
525 const double t0 = (ft1 * b - ft0 * c) / det;
526 const double t1 = (ft0 * b - ft1 * a) / det;
527
528 if (tvw_ptr)
529 *tvw_ptr = t0;
530 if (tlk_ptr)
531 *tlk_ptr = t1;
532
533 return SOLUTION_EXIST;
534 }
535}
const double c
speed of light (cm/ns)

◆ minDistancePointFromOnSegment()

Tools::SEGMENT_MIN_DISTANCE MoFEM::Tools::minDistancePointFromOnSegment ( const double w_ptr,
const double v_ptr,
const double p_ptr,
double *const  t_ptr = nullptr 
)
static

Find closet point on the segment from the point.

Parameters
w_ptrsegment first vertex coordinate
v_ptrsegment second vertex coordinate
p_ptrcoordinate of point
t_ptrdistance on the segment
Note
If t is outside bounds [ 0,-1 ] point is on the line point beyond segment.
double w[] = {-1, 0, 0};
double v[] = {1, 0, 0};
double p[] = {0, 1, 0};
double t;
CHKERR Toolas::minDistancePointFromOnSegment(w, v, p, &t);
double point_on_segment[3];
for (int i = 0; i != 3; ++i)
point_on_segment[i] = w[i] + t * (v[i] - w[i]);
static Index< 'p', 3 > p
Returns
SEGMENT_MIN_DISTANCE

Definition at line 448 of file Tools.cpp.

449 {
451 FTensor::Tensor1<const double *, 3> t_w(&w_ptr[0], &w_ptr[1], &w_ptr[2]);
452 FTensor::Tensor1<const double *, 3> t_v(&v_ptr[0], &v_ptr[1], &v_ptr[2]);
453 FTensor::Tensor1<const double *, 3> t_p(&p_ptr[0], &p_ptr[1], &p_ptr[2]);
455 t_vw(i) = t_v(i) - t_w(i);
456 const double dot_vw = t_vw(i) * t_vw(i);
457 if (std::abs(dot_vw) < std::numeric_limits<double>::epsilon()) {
458 if (t_ptr)
459 *t_ptr = 0;
461 }
463 t_pw(i) = t_p(i) - t_w(i);
464 const double t = t_pw(i) * t_vw(i) / dot_vw;
465 if (t_ptr)
466 *t_ptr = t;
467 return SOLUTION_EXIST;
468}

◆ minTetsQuality()

MoFEMErrorCode MoFEM::Tools::minTetsQuality ( const Range tets,
double min_quality,
Tag  th = nullptr,
boost::function< double(double, double)>  f = [](double a, double b) -> double { return std::min(a, b); } 
)

calculate minimal quality of tetrahedra in range

Parameters
tetsrange
min_qualitymimimal quality
Returns
error code

Definition at line 49 of file Tools.cpp.

50 {
51 MoFEM::Interface &m_field = cOre;
52 moab::Interface &moab(m_field.get_moab());
54 const EntityHandle *conn;
55 int num_nodes;
56 double coords[12];
57 for (auto tet : tets) {
58 CHKERR m_field.get_moab().get_connectivity(tet, conn, num_nodes, true);
59 if (th) {
60 CHKERR moab.tag_get_data(th, conn, num_nodes, coords);
61 } else {
62 CHKERR moab.get_coords(conn, num_nodes, coords);
63 }
64 double q = Tools::volumeLengthQuality(coords);
65 if (!std::isnormal(q))
66 q = -2;
67 min_quality = f(q, min_quality);
68 }
70}

◆ outerProductOfEdgeIntegrationPtsForHex()

MoFEMErrorCode MoFEM::Tools::outerProductOfEdgeIntegrationPtsForHex ( MatrixDouble pts,
const int  edge0,
const int  edge1,
const int  edge2 
)
static

Definition at line 661 of file Tools.cpp.

663 {
665
666 auto check_rule_edge = [](int rule) {
668 if (rule < 0) {
669 SETERRQ1(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
670 "Wrong integration rule: %d", rule);
671 }
672 if (rule > QUAD_1D_TABLE_SIZE) {
673 SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
674 "rule > quadrature order %d < %d", rule, QUAD_1D_TABLE_SIZE);
675 }
676 if (QUAD_1D_TABLE[rule]->dim != 1) {
677 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "wrong dimension");
678 }
679 if (QUAD_1D_TABLE[rule]->order < rule) {
680 SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
681 "wrong order %d != %d", QUAD_1D_TABLE[rule]->order, rule);
682 }
684 };
685
686 CHKERR check_rule_edge(rule_ksi);
687 CHKERR check_rule_edge(rule_eta);
688 CHKERR check_rule_edge(rule_zeta);
689
690 const int nb_gauss_pts_ksi = QUAD_1D_TABLE[rule_ksi]->npoints;
691 const int nb_gauss_pts_eta = QUAD_1D_TABLE[rule_eta]->npoints;
692 const int nb_gauss_pts_zeta = QUAD_1D_TABLE[rule_zeta]->npoints;
693 gauss_pts.resize(4, nb_gauss_pts_ksi * nb_gauss_pts_eta * nb_gauss_pts_zeta,
694 false);
695
696 int gg = 0;
697 for (size_t i = 0; i != nb_gauss_pts_ksi; ++i) {
698 const double wi = QUAD_1D_TABLE[rule_ksi]->weights[i];
699 const double ksi = QUAD_1D_TABLE[rule_ksi]->points[2 * i + 1];
700 for (size_t j = 0; j != nb_gauss_pts_eta; ++j) {
701 const double wj = wi * QUAD_1D_TABLE[rule_eta]->weights[j];
702 const double eta = QUAD_1D_TABLE[rule_eta]->points[2 * j + 1];
703 for (size_t k = 0; k != nb_gauss_pts_zeta; ++k, ++gg) {
704 const double wk = wj * QUAD_1D_TABLE[rule_zeta]->weights[k];
705 const double zeta = QUAD_1D_TABLE[rule_zeta]->points[2 * k + 1];
706 gauss_pts(0, gg) = ksi;
707 gauss_pts(1, gg) = eta;
708 gauss_pts(2, gg) = zeta;
709 gauss_pts(3, gg) = wk;
710 }
711 }
712 }
713
714 if (gg != gauss_pts.size2())
715 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "Wrong size of matrix");
716
718}
constexpr int order
const int dim
double eta
double zeta
Viscous hardening.
Definition: plastic.cpp:177
static QUAD *const QUAD_1D_TABLE[]
Definition: quad.h:164
#define QUAD_1D_TABLE_SIZE
Definition: quad.h:163
double * points
Definition: quad.h:30
double * weights
Definition: quad.h:31
int npoints
Definition: quad.h:29

◆ outerProductOfEdgeIntegrationPtsForQuad()

MoFEMErrorCode MoFEM::Tools::outerProductOfEdgeIntegrationPtsForQuad ( MatrixDouble pts,
const int  edge0,
const int  edge1 
)
static

Definition at line 612 of file Tools.cpp.

613 {
615
616 auto check_rule_edge = [](int rule) {
618 if (rule < 0) {
619 SETERRQ1(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
620 "Wrong integration rule: %d", rule);
621 }
622 if (rule > QUAD_1D_TABLE_SIZE) {
623 SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
624 "rule > quadrature order %d < %d", rule, QUAD_1D_TABLE_SIZE);
625 }
626 if (QUAD_1D_TABLE[rule]->dim != 1) {
627 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "wrong dimension");
628 }
629 if (QUAD_1D_TABLE[rule]->order < rule) {
630 SETERRQ2(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
631 "wrong order %d != %d", QUAD_1D_TABLE[rule]->order, rule);
632 }
634 };
635
636 CHKERR check_rule_edge(rule_ksi);
637 CHKERR check_rule_edge(rule_eta);
638
639 const int nb_gauss_pts_ksi = QUAD_1D_TABLE[rule_ksi]->npoints;
640 const int nb_gauss_pts_eta = QUAD_1D_TABLE[rule_eta]->npoints;
641 gauss_pts.resize(3, nb_gauss_pts_ksi * nb_gauss_pts_eta, false);
642
643 int gg = 0;
644 for (size_t i = 0; i != nb_gauss_pts_ksi; ++i) {
645 const double wi = QUAD_1D_TABLE[rule_ksi]->weights[i];
646 const double ksi = (QUAD_1D_TABLE[rule_ksi]->points[2 * i + 1]);
647 for (size_t j = 0; j != nb_gauss_pts_eta; ++j, ++gg) {
648 const double wk = wi * QUAD_1D_TABLE[rule_eta]->weights[j];
649 const double eta = QUAD_1D_TABLE[rule_eta]->points[2 * j + 1];
650 gauss_pts(0, gg) = ksi;
651 gauss_pts(1, gg) = eta;
652 gauss_pts(2, gg) = wk;
653 }
654 }
655 if (gg != gauss_pts.size2())
656 SETERRQ(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY, "Wrong size of matrix");
657
659}

◆ query_interface()

MoFEMErrorCode MoFEM::Tools::query_interface ( boost::typeindex::type_index  type_index,
UnknownInterface **  iface 
) const
virtual

Implements MoFEM::UnknownInterface.

Definition at line 9 of file Tools.cpp.

10 {
11 *iface = const_cast<Tools *>(this);
12 return 0;
13}
Tools(const MoFEM::Core &core)
Definition: Tools.hpp:25

◆ shapeFunMBEDGE()

template<int LDB>
MoFEMErrorCode MoFEM::Tools::shapeFunMBEDGE ( double shape,
const double ksi,
const int  nb 
)
static

Calculate shape functions on edge.

Note
Template parameter is leading dimension of point coordinate arrays, such that \(ksi_{n+1} = ksi[n + LDB]\)
Template Parameters
1
Parameters
shapeshape functions
ksipointer to first local coordinates
nbnumber of points
Returns
MoFEMErrorCode

Definition at line 624 of file Tools.hpp.

625 {
627 for (int n = 0; n != nb; ++n) {
628 shape[0] = shapeFunMBEDGE0(*ksi);
629 shape[1] = shapeFunMBEDGE1(*ksi);
630 shape += 2;
631 ksi += LDB;
632 }
634}
static double shapeFunMBEDGE1(const double x)
Definition: Tools.hpp:619
static double shapeFunMBEDGE0(const double x)
Definition: Tools.hpp:615

◆ shapeFunMBEDGE0()

double MoFEM::Tools::shapeFunMBEDGE0 ( const double  x)
inlinestatic

Definition at line 615 of file Tools.hpp.

615 {
616 return N_MBEDGE0(x);
617}
#define N_MBEDGE0(x)
edge shape function
Definition: fem_tools.h:105

◆ shapeFunMBEDGE1()

double MoFEM::Tools::shapeFunMBEDGE1 ( const double  x)
inlinestatic

Definition at line 619 of file Tools.hpp.

619 {
620 return N_MBEDGE1(x);
621}
#define N_MBEDGE1(x)
edge shape function
Definition: fem_tools.h:106

◆ shapeFunMBTET()

template<int LDB>
MoFEMErrorCode MoFEM::Tools::shapeFunMBTET ( double shape,
const double ksi,
const double eta,
const double zeta,
const double  nb 
)
static

Calculate shape functions on tetrahedron.

Note
Template parameter is leading dimension of point coordinate arrays, such that \(ksi_{n+1} = ksi[n + LDB]\)
Template Parameters
1
Parameters
shapeshape functions
ksipointer to first local coordinates
etapointer to second local coordinates
zetapointer to first third coordinates
nbnumber of points
Returns
MoFEMErrorCode

Definition at line 680 of file Tools.hpp.

682 {
684 for (int n = 0; n != nb; ++n) {
685 shape[0] = shapeFunMBTET0(*ksi, *eta, *zeta);
686 shape[1] = shapeFunMBTET1(*ksi, *eta, *zeta);
687 shape[2] = shapeFunMBTET2(*ksi, *eta, *zeta);
688 shape[3] = shapeFunMBTET3(*ksi, *eta, *zeta);
689 shape += 4;
690 ksi += LDB;
691 eta += LDB;
692 zeta += LDB;
693 }
695}
static double shapeFunMBTET0(const double x, const double y, const double z)
Definition: Tools.hpp:663
static double shapeFunMBTET3(const double x, const double y, const double z)
Definition: Tools.hpp:675
static double shapeFunMBTET1(const double x, const double y, const double z)
Definition: Tools.hpp:667
static double shapeFunMBTET2(const double x, const double y, const double z)
Definition: Tools.hpp:671

◆ shapeFunMBTET0()

double MoFEM::Tools::shapeFunMBTET0 ( const double  x,
const double  y,
const double  z 
)
inlinestatic

Definition at line 663 of file Tools.hpp.

663 {
664 return N_MBTET0(x, y, z);
665}
#define N_MBTET0(x, y, z)
tetrahedral shape function
Definition: fem_tools.h:28

◆ shapeFunMBTET1()

double MoFEM::Tools::shapeFunMBTET1 ( const double  x,
const double  y,
const double  z 
)
inlinestatic

Definition at line 667 of file Tools.hpp.

667 {
668 return N_MBTET1(x, y, z);
669}
#define N_MBTET1(x, y, z)
tetrahedral shape function
Definition: fem_tools.h:29

◆ shapeFunMBTET2()

double MoFEM::Tools::shapeFunMBTET2 ( const double  x,
const double  y,
const double  z 
)
inlinestatic

Definition at line 671 of file Tools.hpp.

671 {
672 return N_MBTET2(x, y, z);
673}
#define N_MBTET2(x, y, z)
tetrahedral shape function
Definition: fem_tools.h:30

◆ shapeFunMBTET3()

double MoFEM::Tools::shapeFunMBTET3 ( const double  x,
const double  y,
const double  z 
)
inlinestatic

Definition at line 675 of file Tools.hpp.

675 {
676 return N_MBTET3(x, y, z);
677};
#define N_MBTET3(x, y, z)
tetrahedral shape function
Definition: fem_tools.h:31

◆ shapeFunMBTRI()

template<int LDB>
MoFEMErrorCode MoFEM::Tools::shapeFunMBTRI ( double shape,
const double ksi,
const double eta,
const int  nb 
)
static

Calculate shape functions on triangle.

Note
Template parameter is leading dimension of point coordinate arrays, such that \(ksi_{n+1} = ksi[n + LDB]\)
Template Parameters
1
Parameters
shapeshape functions
ksipointer to first local coordinates
etapointer to second local coordinates
nbnumber of points
Returns
MoFEMErrorCode

Definition at line 649 of file Tools.hpp.

650 {
652 for (int n = 0; n != nb; ++n) {
653 shape[0] = shapeFunMBTRI0(*ksi, *eta);
654 shape[1] = shapeFunMBTRI1(*ksi, *eta);
655 shape[2] = shapeFunMBTRI2(*ksi, *eta);
656 shape += 3;
657 ksi += LDB;
658 eta += LDB;
659 }
661}
static double shapeFunMBTRI1(const double x, const double y)
Definition: Tools.hpp:640
static double shapeFunMBTRI0(const double x, const double y)
Definition: Tools.hpp:636
static double shapeFunMBTRI2(const double x, const double y)
Definition: Tools.hpp:644

◆ shapeFunMBTRI0()

double MoFEM::Tools::shapeFunMBTRI0 ( const double  x,
const double  y 
)
inlinestatic

Definition at line 636 of file Tools.hpp.

636 {
637 return N_MBTRI0(x, y);
638}
#define N_MBTRI0(x, y)
triangle shape function
Definition: fem_tools.h:46

◆ shapeFunMBTRI1()

double MoFEM::Tools::shapeFunMBTRI1 ( const double  x,
const double  y 
)
inlinestatic

Definition at line 640 of file Tools.hpp.

640 {
641 return N_MBTRI1(x, y);
642}
#define N_MBTRI1(x, y)
triangle shape function
Definition: fem_tools.h:47

◆ shapeFunMBTRI2()

double MoFEM::Tools::shapeFunMBTRI2 ( const double  x,
const double  y 
)
inlinestatic

Definition at line 644 of file Tools.hpp.

644 {
645 return N_MBTRI2(x, y);
646}
#define N_MBTRI2(x, y)
triangle shape function
Definition: fem_tools.h:48

◆ tetVolume()

double MoFEM::Tools::tetVolume ( const double coords)
static

Calculate volume of tetrahedron.

Parameters
coords
Returns
double volume

Definition at line 30 of file Tools.cpp.

30 {
31 double diff_n[12];
32 ShapeDiffMBTET(diff_n);
33 FTensor::Tensor1<double *, 3> t_diff_n(&diff_n[0], &diff_n[1], &diff_n[2], 3);
34 FTensor::Tensor1<const double *, 3> t_coords(&coords[0], &coords[1],
35 &coords[2], 3);
39 jac(i, j) = 0;
40 for (int nn = 0; nn != 4; nn++) {
41 jac(i, j) += t_coords(i) * t_diff_n(j);
42 ++t_coords;
43 ++t_diff_n;
44 }
45 return determinantTensor3by3(jac) / 6.;
46}
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
Definition: Templates.hpp:1511

◆ volumeLengthQuality()

double MoFEM::Tools::volumeLengthQuality ( const double coords)
static

Calculate tetrahedron volume length quality.

Parameters
coordstet coordinates
Returns
Volume-length quality

Definition at line 15 of file Tools.cpp.

15 {
16 double lrms = 0;
17 for (int dd = 0; dd != 3; dd++) {
18 lrms += pow(coords[0 * 3 + dd] - coords[1 * 3 + dd], 2) +
19 pow(coords[0 * 3 + dd] - coords[2 * 3 + dd], 2) +
20 pow(coords[0 * 3 + dd] - coords[3 * 3 + dd], 2) +
21 pow(coords[1 * 3 + dd] - coords[2 * 3 + dd], 2) +
22 pow(coords[1 * 3 + dd] - coords[3 * 3 + dd], 2) +
23 pow(coords[2 * 3 + dd] - coords[3 * 3 + dd], 2);
24 }
25 lrms = sqrt((1. / 6.) * lrms);
26 double volume = tetVolume(coords);
27 return 6. * sqrt(2.) * volume / pow(lrms, 3);
28}
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)
Definition: ddTensor0.hpp:33
static double tetVolume(const double *coords)
Calculate volume of tetrahedron.
Definition: Tools.cpp:30

◆ writeTetsWithQuality()

MoFEMErrorCode MoFEM::Tools::writeTetsWithQuality ( const char *  file_name,
const char *  file_type,
const char *  options,
const Range tets,
Tag  th = nullptr,
boost::function< bool(double)>  f = [](double q) -> bool { if (q <= 0) return true; else return false; } 
)

Write file with tetrahedral of given quality.

Parameters
file_name
file_type
options
tets
th
f
Returns
MoFEMErrorCode

Definition at line 271 of file Tools.cpp.

275 {
276 MoFEM::Interface &m_field = cOre;
277 moab::Interface &moab(m_field.get_moab());
279 Range out_tets;
280 CHKERR getTetsWithQuality(out_tets, tets, th, f);
281 EntityHandle meshset;
282 CHKERR moab.create_meshset(MESHSET_SET, meshset);
283 CHKERR moab.add_entities(meshset, out_tets);
284 CHKERR moab.write_file(file_name, file_type, options, &meshset, 1);
285 CHKERR moab.delete_entities(&meshset, 1);
287}
MoFEMErrorCode getTetsWithQuality(Range &out_tets, const Range &tets, Tag th=nullptr, boost::function< bool(double)> f=[](double q) -> bool { if(q<=0) return true;else return false;})
Get the Tets With Quality.
Definition: Tools.cpp:246

Member Data Documentation

◆ cOre

MoFEM::Core& MoFEM::Tools::cOre

Definition at line 24 of file Tools.hpp.

◆ diffN_MBEDGE0x

constexpr double MoFEM::Tools::diffN_MBEDGE0x = diffN_MBEDGE0
staticconstexpr

Definition at line 65 of file Tools.hpp.

◆ diffN_MBEDGE1x

constexpr double MoFEM::Tools::diffN_MBEDGE1x = diffN_MBEDGE1
staticconstexpr

Definition at line 66 of file Tools.hpp.

◆ diffShapeFunMBEDGE

constexpr std::array< double, 2 > MoFEM::Tools::diffShapeFunMBEDGE
staticconstexpr
Initial value:
static constexpr double diffN_MBEDGE0x
Definition: Tools.hpp:65
static constexpr double diffN_MBEDGE1x
Definition: Tools.hpp:66

Definition at line 68 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter

constexpr std::array< double, 24 > MoFEM::Tools::diffShapeFunMBHEXAtCenter
staticconstexpr
Initial value:
= {
}
static constexpr double diffShapeFunMBHEXAtCenter6y
derivative of quad shape function
Definition: Tools.hpp:201
static constexpr double diffShapeFunMBHEXAtCenter0y
derivative of HEX shape function
Definition: Tools.hpp:165
static constexpr double diffShapeFunMBHEXAtCenter1x
derivative of HEX shape function
Definition: Tools.hpp:169
static constexpr double diffShapeFunMBHEXAtCenter3z
derivative of quad shape function
Definition: Tools.hpp:185
static constexpr double diffShapeFunMBHEXAtCenter7y
derivative of quad shape function
Definition: Tools.hpp:207
static constexpr double diffShapeFunMBHEXAtCenter4y
derivative of quad shape function
Definition: Tools.hpp:189
static constexpr double diffShapeFunMBHEXAtCenter0z
derivative of HEX shape function
Definition: Tools.hpp:167
static constexpr double diffShapeFunMBHEXAtCenter1y
derivative of HEX shape function
Definition: Tools.hpp:171
static constexpr double diffShapeFunMBHEXAtCenter5y
derivative of quad shape function
Definition: Tools.hpp:195
static constexpr double diffShapeFunMBHEXAtCenter2y
derivative of HEX shape function
Definition: Tools.hpp:177
static constexpr double diffShapeFunMBHEXAtCenter3x
derivative of HEX shape function
Definition: Tools.hpp:181
static constexpr double diffShapeFunMBHEXAtCenter0x
derivative of HEX shape function
Definition: Tools.hpp:163
static constexpr double diffShapeFunMBHEXAtCenter3y
derivative of quad shape function
Definition: Tools.hpp:183
static constexpr double diffShapeFunMBHEXAtCenter2x
derivative of HEX shape function
Definition: Tools.hpp:175
static constexpr double diffShapeFunMBHEXAtCenter7z
derivative of quad shape function
Definition: Tools.hpp:209
static constexpr double diffShapeFunMBHEXAtCenter7x
derivative of HEX shape function
Definition: Tools.hpp:205
static constexpr double diffShapeFunMBHEXAtCenter6x
derivative of HEX shape function
Definition: Tools.hpp:199
static constexpr double diffShapeFunMBHEXAtCenter4x
derivative of HEX shape function
Definition: Tools.hpp:187
static constexpr double diffShapeFunMBHEXAtCenter5z
derivative of quad shape function
Definition: Tools.hpp:197
static constexpr double diffShapeFunMBHEXAtCenter2z
derivative of HEX shape function
Definition: Tools.hpp:179
static constexpr double diffShapeFunMBHEXAtCenter4z
derivative of quad shape function
Definition: Tools.hpp:191
static constexpr double diffShapeFunMBHEXAtCenter6z
derivative of quad shape function
Definition: Tools.hpp:203
static constexpr double diffShapeFunMBHEXAtCenter1z
derivative of HEX shape function
Definition: Tools.hpp:173
static constexpr double diffShapeFunMBHEXAtCenter5x
derivative of HEX shape function
Definition: Tools.hpp:193

Definition at line 218 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter0x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter0x
staticconstexpr
Initial value:
=
diffN_MBHEX0x(0.5, 0.5)
#define diffN_MBHEX0x(y, z)
Definition: fem_tools.h:79

derivative of HEX shape function

Definition at line 163 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter0y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter0y
staticconstexpr
Initial value:
=
diffN_MBHEX0y(0.5, 0.5)
#define diffN_MBHEX0y(x, z)
Definition: fem_tools.h:87

derivative of HEX shape function

Definition at line 165 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter0z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter0z
staticconstexpr
Initial value:
=
diffN_MBHEX0z(0.5, 0.5)
#define diffN_MBHEX0z(x, y)
Definition: fem_tools.h:95

derivative of HEX shape function

Definition at line 167 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter1x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter1x
staticconstexpr
Initial value:
=
diffN_MBHEX1x(0.5, 0.5)
#define diffN_MBHEX1x(y, z)
Definition: fem_tools.h:80

derivative of HEX shape function

Definition at line 169 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter1y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter1y
staticconstexpr
Initial value:
=
diffN_MBHEX1y(0.5, 0.5)
#define diffN_MBHEX1y(x, z)
Definition: fem_tools.h:88

derivative of HEX shape function

Definition at line 171 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter1z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter1z
staticconstexpr
Initial value:
=
diffN_MBHEX1z(0.5, 0.5)
#define diffN_MBHEX1z(x, y)
Definition: fem_tools.h:96

derivative of HEX shape function

Definition at line 173 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter2x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter2x
staticconstexpr
Initial value:
=
diffN_MBHEX2x(0.5, 0.5)
#define diffN_MBHEX2x(y, z)
Definition: fem_tools.h:81

derivative of HEX shape function

Definition at line 175 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter2y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter2y
staticconstexpr
Initial value:
=
diffN_MBHEX2y(0.5, 0.5)
#define diffN_MBHEX2y(x, z)
Definition: fem_tools.h:89

derivative of HEX shape function

Definition at line 177 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter2z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter2z
staticconstexpr
Initial value:
=
diffN_MBHEX2z(0.5, 0.5)
#define diffN_MBHEX2z(x, y)
Definition: fem_tools.h:97

derivative of HEX shape function

Definition at line 179 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter3x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter3x
staticconstexpr
Initial value:
=
diffN_MBHEX3x(0.5, 0.5)
#define diffN_MBHEX3x(y, z)
Definition: fem_tools.h:82

derivative of HEX shape function

Definition at line 181 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter3y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter3y
staticconstexpr
Initial value:
=
diffN_MBHEX3y(0.5, 0.5)
#define diffN_MBHEX3y(x, z)
Definition: fem_tools.h:90

derivative of quad shape function

Definition at line 183 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter3z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter3z
staticconstexpr
Initial value:
=
diffN_MBHEX3z(0.5, 0.5)
#define diffN_MBHEX3z(x, y)
Definition: fem_tools.h:98

derivative of quad shape function

Definition at line 185 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter4x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter4x
staticconstexpr
Initial value:
=
diffN_MBHEX4x(0.5, 0.5)
#define diffN_MBHEX4x(y, z)
Definition: fem_tools.h:83

derivative of HEX shape function

Definition at line 187 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter4y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter4y
staticconstexpr
Initial value:
=
diffN_MBHEX4y(0.5, 0.5)
#define diffN_MBHEX4y(x, z)
Definition: fem_tools.h:91

derivative of quad shape function

Definition at line 189 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter4z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter4z
staticconstexpr
Initial value:
=
diffN_MBHEX4z(0.5, 0.5)
#define diffN_MBHEX4z(x, y)
Definition: fem_tools.h:99

derivative of quad shape function

Definition at line 191 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter5x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter5x
staticconstexpr
Initial value:
=
diffN_MBHEX5x(0.5, 0.5)
#define diffN_MBHEX5x(y, z)
Definition: fem_tools.h:84

derivative of HEX shape function

Definition at line 193 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter5y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter5y
staticconstexpr
Initial value:
=
diffN_MBHEX5y(0.5, 0.5)
#define diffN_MBHEX5y(x, z)
Definition: fem_tools.h:92

derivative of quad shape function

Definition at line 195 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter5z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter5z
staticconstexpr
Initial value:
=
diffN_MBHEX5z(0.5, 0.5)
#define diffN_MBHEX5z(x, y)
Definition: fem_tools.h:100

derivative of quad shape function

Definition at line 197 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter6x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter6x
staticconstexpr
Initial value:
=
diffN_MBHEX6x(0.5, 0.5)
#define diffN_MBHEX6x(y, z)
Definition: fem_tools.h:85

derivative of HEX shape function

Definition at line 199 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter6y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter6y
staticconstexpr
Initial value:
=
diffN_MBHEX6y(0.5, 0.5)
#define diffN_MBHEX6y(x, z)
Definition: fem_tools.h:93

derivative of quad shape function

Definition at line 201 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter6z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter6z
staticconstexpr
Initial value:
=
diffN_MBHEX6z(0.5, 0.5)
#define diffN_MBHEX6z(x, y)
Definition: fem_tools.h:101

derivative of quad shape function

Definition at line 203 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter7x

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter7x
staticconstexpr
Initial value:
=
diffN_MBHEX7x(0.5, 0.5)
#define diffN_MBHEX7x(y, z)
Definition: fem_tools.h:86

derivative of HEX shape function

Definition at line 205 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter7y

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter7y
staticconstexpr
Initial value:
=
diffN_MBHEX7y(0.5, 0.5)
#define diffN_MBHEX7y(x, z)
Definition: fem_tools.h:94

derivative of quad shape function

Definition at line 207 of file Tools.hpp.

◆ diffShapeFunMBHEXAtCenter7z

constexpr double MoFEM::Tools::diffShapeFunMBHEXAtCenter7z
staticconstexpr
Initial value:
=
diffN_MBHEX7z(0.5, 0.5)
#define diffN_MBHEX7z(x, y)
Definition: fem_tools.h:102

derivative of quad shape function

Definition at line 209 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter

constexpr std::array< double, 8 > MoFEM::Tools::diffShapeFunMBQUADAtCenter
staticconstexpr
Initial value:
= {
static constexpr double diffShapeFunMBQUADAtCenter0x
derivative of quad shape function
Definition: Tools.hpp:146
static constexpr double diffShapeFunMBQUADAtCenter2y
derivative of quad shape function
Definition: Tools.hpp:156
static constexpr double diffShapeFunMBQUADAtCenter2x
derivative of quad shape function
Definition: Tools.hpp:154
static constexpr double diffShapeFunMBQUADAtCenter3y
derivative of quad shape function
Definition: Tools.hpp:160
static constexpr double diffShapeFunMBQUADAtCenter1y
derivative of quad shape function
Definition: Tools.hpp:152
static constexpr double diffShapeFunMBQUADAtCenter3x
derivative of quad shape function
Definition: Tools.hpp:158
static constexpr double diffShapeFunMBQUADAtCenter1x
derivative of quad shape function
Definition: Tools.hpp:150
static constexpr double diffShapeFunMBQUADAtCenter0y
derivative of quad shape function
Definition: Tools.hpp:148

Definition at line 212 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter0x

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter0x
staticconstexpr
Initial value:
=
#define diffN_MBQUAD0x(y)
Definition: fem_tools.h:61

derivative of quad shape function

Definition at line 146 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter0y

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter0y
staticconstexpr
Initial value:
=
#define diffN_MBQUAD0y(x)
Definition: fem_tools.h:62

derivative of quad shape function

Definition at line 148 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter1x

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter1x
staticconstexpr
Initial value:
=
#define diffN_MBQUAD1x(y)
Definition: fem_tools.h:63

derivative of quad shape function

Definition at line 150 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter1y

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter1y
staticconstexpr
Initial value:
=
#define diffN_MBQUAD1y(x)
Definition: fem_tools.h:64

derivative of quad shape function

Definition at line 152 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter2x

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter2x
staticconstexpr
Initial value:
=
#define diffN_MBQUAD2x(y)
Definition: fem_tools.h:65

derivative of quad shape function

Definition at line 154 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter2y

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter2y
staticconstexpr
Initial value:
=
#define diffN_MBQUAD2y(x)
Definition: fem_tools.h:66

derivative of quad shape function

Definition at line 156 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter3x

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter3x
staticconstexpr
Initial value:
=
#define diffN_MBQUAD3x(y)
Definition: fem_tools.h:67

derivative of quad shape function

Definition at line 158 of file Tools.hpp.

◆ diffShapeFunMBQUADAtCenter3y

constexpr double MoFEM::Tools::diffShapeFunMBQUADAtCenter3y
staticconstexpr
Initial value:
=
#define diffN_MBQUAD3y(x)
Definition: fem_tools.h:68

derivative of quad shape function

Definition at line 160 of file Tools.hpp.

◆ diffShapeFunMBTET

constexpr std::array< double, 12 > MoFEM::Tools::diffShapeFunMBTET
staticconstexpr
Initial value:
= {
static constexpr double diffShapeFunMBTET0y
derivative of tetrahedral shape function
Definition: Tools.hpp:248
static constexpr double diffShapeFunMBTET0z
derivative of tetrahedral shape function
Definition: Tools.hpp:250
static constexpr double diffShapeFunMBTET3y
derivative of tetrahedral shape function
Definition: Tools.hpp:266
static constexpr double diffShapeFunMBTET1z
derivative of tetrahedral shape function
Definition: Tools.hpp:256
static constexpr double diffShapeFunMBTET2z
derivative of tetrahedral shape function
Definition: Tools.hpp:262
static constexpr double diffShapeFunMBTET3x
derivative of tetrahedral shape function
Definition: Tools.hpp:264
static constexpr double diffShapeFunMBTET0x
derivative of tetrahedral shape function
Definition: Tools.hpp:246
static constexpr double diffShapeFunMBTET1y
derivative of tetrahedral shape function
Definition: Tools.hpp:254
static constexpr double diffShapeFunMBTET3z
derivative of tetrahedral shape function
Definition: Tools.hpp:268
static constexpr double diffShapeFunMBTET1x
derivative of tetrahedral shape function
Definition: Tools.hpp:252
static constexpr double diffShapeFunMBTET2x
derivative of tetrahedral shape function
Definition: Tools.hpp:258
static constexpr double diffShapeFunMBTET2y
derivative of tetrahedral shape function
Definition: Tools.hpp:260

Definition at line 271 of file Tools.hpp.

◆ diffShapeFunMBTET0x

constexpr double MoFEM::Tools::diffShapeFunMBTET0x
staticconstexpr
Initial value:
=
#define diffN_MBTET0x
derivative of tetrahedral shape function
Definition: fem_tools.h:32

derivative of tetrahedral shape function

Definition at line 246 of file Tools.hpp.

◆ diffShapeFunMBTET0y

constexpr double MoFEM::Tools::diffShapeFunMBTET0y
staticconstexpr
Initial value:
=
#define diffN_MBTET0y
derivative of tetrahedral shape function
Definition: fem_tools.h:33

derivative of tetrahedral shape function

Definition at line 248 of file Tools.hpp.

◆ diffShapeFunMBTET0z

constexpr double MoFEM::Tools::diffShapeFunMBTET0z
staticconstexpr
Initial value:
=
#define diffN_MBTET0z
derivative of tetrahedral shape function
Definition: fem_tools.h:34

derivative of tetrahedral shape function

Definition at line 250 of file Tools.hpp.

◆ diffShapeFunMBTET1x

constexpr double MoFEM::Tools::diffShapeFunMBTET1x
staticconstexpr
Initial value:
=
#define diffN_MBTET1x
derivative of tetrahedral shape function
Definition: fem_tools.h:35

derivative of tetrahedral shape function

Definition at line 252 of file Tools.hpp.

◆ diffShapeFunMBTET1y

constexpr double MoFEM::Tools::diffShapeFunMBTET1y
staticconstexpr
Initial value:
=
#define diffN_MBTET1y
derivative of tetrahedral shape function
Definition: fem_tools.h:36

derivative of tetrahedral shape function

Definition at line 254 of file Tools.hpp.

◆ diffShapeFunMBTET1z

constexpr double MoFEM::Tools::diffShapeFunMBTET1z
staticconstexpr
Initial value:
=
#define diffN_MBTET1z
derivative of tetrahedral shape function
Definition: fem_tools.h:37

derivative of tetrahedral shape function

Definition at line 256 of file Tools.hpp.

◆ diffShapeFunMBTET2x

constexpr double MoFEM::Tools::diffShapeFunMBTET2x
staticconstexpr
Initial value:
=
#define diffN_MBTET2x
derivative of tetrahedral shape function
Definition: fem_tools.h:38

derivative of tetrahedral shape function

Definition at line 258 of file Tools.hpp.

◆ diffShapeFunMBTET2y

constexpr double MoFEM::Tools::diffShapeFunMBTET2y
staticconstexpr
Initial value:
=
#define diffN_MBTET2y
derivative of tetrahedral shape function
Definition: fem_tools.h:39

derivative of tetrahedral shape function

Definition at line 260 of file Tools.hpp.

◆ diffShapeFunMBTET2z

constexpr double MoFEM::Tools::diffShapeFunMBTET2z
staticconstexpr
Initial value:
=
#define diffN_MBTET2z
derivative of tetrahedral shape function
Definition: fem_tools.h:40

derivative of tetrahedral shape function

Definition at line 262 of file Tools.hpp.

◆ diffShapeFunMBTET3x

constexpr double MoFEM::Tools::diffShapeFunMBTET3x
staticconstexpr
Initial value:
=
#define diffN_MBTET3x
derivative of tetrahedral shape function
Definition: fem_tools.h:41

derivative of tetrahedral shape function

Definition at line 264 of file Tools.hpp.

◆ diffShapeFunMBTET3y

constexpr double MoFEM::Tools::diffShapeFunMBTET3y
staticconstexpr
Initial value:
=
#define diffN_MBTET3y
derivative of tetrahedral shape function
Definition: fem_tools.h:42

derivative of tetrahedral shape function

Definition at line 266 of file Tools.hpp.

◆ diffShapeFunMBTET3z

constexpr double MoFEM::Tools::diffShapeFunMBTET3z
staticconstexpr
Initial value:
=
#define diffN_MBTET3z
derivative of tetrahedral shape function
Definition: fem_tools.h:43

derivative of tetrahedral shape function

Definition at line 268 of file Tools.hpp.

◆ diffShapeFunMBTRI

constexpr std::array< double, 6 > MoFEM::Tools::diffShapeFunMBTRI
staticconstexpr
Initial value:
= {
static constexpr double diffShapeFunMBTRI1x
derivative of triangle shape function
Definition: Tools.hpp:95
static constexpr double diffShapeFunMBTRI0x
derivative of triangle shape function
Definition: Tools.hpp:91
static constexpr double diffShapeFunMBTRI2x
derivative of triangle shape function
Definition: Tools.hpp:99
static constexpr double diffShapeFunMBTRI2y
derivative of triangle shape function
Definition: Tools.hpp:101
static constexpr double diffShapeFunMBTRI0y
derivative of triangle shape function
Definition: Tools.hpp:93
static constexpr double diffShapeFunMBTRI1y
derivative of triangle shape function
Definition: Tools.hpp:97

Definition at line 104 of file Tools.hpp.

◆ diffShapeFunMBTRI0x

constexpr double MoFEM::Tools::diffShapeFunMBTRI0x
staticconstexpr
Initial value:
=
#define diffN_MBTRI0x
derivative of triangle shape function
Definition: fem_tools.h:49

derivative of triangle shape function

Definition at line 91 of file Tools.hpp.

◆ diffShapeFunMBTRI0y

constexpr double MoFEM::Tools::diffShapeFunMBTRI0y
staticconstexpr
Initial value:
=
#define diffN_MBTRI0y
derivative of triangle shape function
Definition: fem_tools.h:50

derivative of triangle shape function

Definition at line 93 of file Tools.hpp.

◆ diffShapeFunMBTRI1x

constexpr double MoFEM::Tools::diffShapeFunMBTRI1x
staticconstexpr
Initial value:
=
#define diffN_MBTRI1x
derivative of triangle shape function
Definition: fem_tools.h:51

derivative of triangle shape function

Definition at line 95 of file Tools.hpp.

◆ diffShapeFunMBTRI1y

constexpr double MoFEM::Tools::diffShapeFunMBTRI1y
staticconstexpr
Initial value:
=
#define diffN_MBTRI1y
derivative of triangle shape function
Definition: fem_tools.h:52

derivative of triangle shape function

Definition at line 97 of file Tools.hpp.

◆ diffShapeFunMBTRI2x

constexpr double MoFEM::Tools::diffShapeFunMBTRI2x
staticconstexpr
Initial value:
=
#define diffN_MBTRI2x
derivative of triangle shape function
Definition: fem_tools.h:53

derivative of triangle shape function

Definition at line 99 of file Tools.hpp.

◆ diffShapeFunMBTRI2y

constexpr double MoFEM::Tools::diffShapeFunMBTRI2y
staticconstexpr
Initial value:
=
#define diffN_MBTRI2y
derivative of triangle shape function
Definition: fem_tools.h:54

derivative of triangle shape function

Definition at line 101 of file Tools.hpp.

◆ shapeFunMBEDGE0At00

constexpr double MoFEM::Tools::shapeFunMBEDGE0At00 = N_MBEDGE0(0)
staticconstexpr

Definition at line 55 of file Tools.hpp.

◆ shapeFunMBEDGE1At00

constexpr double MoFEM::Tools::shapeFunMBEDGE1At00 = N_MBEDGE1(0)
staticconstexpr

Definition at line 56 of file Tools.hpp.

◆ shapeFunMBEDGEAt00

constexpr std::array< double, 2 > MoFEM::Tools::shapeFunMBEDGEAt00
staticconstexpr
Initial value:
= {
static constexpr double shapeFunMBEDGE1At00
Definition: Tools.hpp:56
static constexpr double shapeFunMBEDGE0At00
Definition: Tools.hpp:55

Array of shape function at zero local point on reference element.

Definition at line 62 of file Tools.hpp.

◆ shapeFunMBTET0At000

constexpr double MoFEM::Tools::shapeFunMBTET0At000 = N_MBTET0(0, 0, 0)
staticconstexpr

Definition at line 293 of file Tools.hpp.

◆ shapeFunMBTET0AtOneThird

constexpr double MoFEM::Tools::shapeFunMBTET0AtOneThird
staticconstexpr
Initial value:
=
N_MBTET0(1. / 3., 1. / 3., 1. / 3.)

Definition at line 298 of file Tools.hpp.

◆ shapeFunMBTET1At000

constexpr double MoFEM::Tools::shapeFunMBTET1At000 = N_MBTET1(0, 0, 0)
staticconstexpr

Definition at line 294 of file Tools.hpp.

◆ shapeFunMBTET1AtOneThird

constexpr double MoFEM::Tools::shapeFunMBTET1AtOneThird
staticconstexpr
Initial value:
=
N_MBTET1(1. / 3., 1. / 3., 1. / 3.)

Definition at line 300 of file Tools.hpp.

◆ shapeFunMBTET2At000

constexpr double MoFEM::Tools::shapeFunMBTET2At000 = N_MBTET2(0, 0, 0)
staticconstexpr

Definition at line 295 of file Tools.hpp.

◆ shapeFunMBTET2AtOneThird

constexpr double MoFEM::Tools::shapeFunMBTET2AtOneThird
staticconstexpr
Initial value:
=
N_MBTET2(1. / 3., 1. / 3., 1. / 3.)

Definition at line 302 of file Tools.hpp.

◆ shapeFunMBTET3At000

constexpr double MoFEM::Tools::shapeFunMBTET3At000 = N_MBTET3(0, 0, 0)
staticconstexpr

Definition at line 296 of file Tools.hpp.

◆ shapeFunMBTET3AtOneThird

constexpr double MoFEM::Tools::shapeFunMBTET3AtOneThird
staticconstexpr
Initial value:
=
N_MBTET3(1. / 3., 1. / 3., 1. / 3.)

Definition at line 304 of file Tools.hpp.

◆ shapeFunMBTETAt000

constexpr std::array< double, 4 > MoFEM::Tools::shapeFunMBTETAt000
staticconstexpr
Initial value:
= {
static constexpr double shapeFunMBTET1At000
Definition: Tools.hpp:294
static constexpr double shapeFunMBTET0At000
Definition: Tools.hpp:293
static constexpr double shapeFunMBTET3At000
Definition: Tools.hpp:296
static constexpr double shapeFunMBTET2At000
Definition: Tools.hpp:295

Array of shape function at zero local point on reference element.

Definition at line 330 of file Tools.hpp.

◆ shapeFunMBTETAtOneThird

constexpr std::array<double, 4> MoFEM::Tools::shapeFunMBTETAtOneThird
staticconstexpr
Initial value:
= {
static constexpr double shapeFunMBTET1AtOneThird
Definition: Tools.hpp:300
static constexpr double shapeFunMBTET2AtOneThird
Definition: Tools.hpp:302
static constexpr double shapeFunMBTET3AtOneThird
Definition: Tools.hpp:304
static constexpr double shapeFunMBTET0AtOneThird
Definition: Tools.hpp:298

Array of shape function at center on reference element.

Definition at line 338 of file Tools.hpp.

◆ shapeFunMBTRI0At00

constexpr double MoFEM::Tools::shapeFunMBTRI0At00 = N_MBTRI0(0, 0)
staticconstexpr

Definition at line 112 of file Tools.hpp.

◆ shapeFunMBTRI1At00

constexpr double MoFEM::Tools::shapeFunMBTRI1At00 = N_MBTRI1(0, 0)
staticconstexpr

Definition at line 113 of file Tools.hpp.

◆ shapeFunMBTRI2At00

constexpr double MoFEM::Tools::shapeFunMBTRI2At00 = N_MBTRI2(0, 0)
staticconstexpr

Definition at line 114 of file Tools.hpp.

◆ shapeFunMBTRIAt00

constexpr std::array< double, 3 > MoFEM::Tools::shapeFunMBTRIAt00
staticconstexpr
Initial value:
= {
static constexpr double shapeFunMBTRI1At00
Definition: Tools.hpp:113
static constexpr double shapeFunMBTRI0At00
Definition: Tools.hpp:112
static constexpr double shapeFunMBTRI2At00
Definition: Tools.hpp:114

Array of shape function at zero local point on reference element.

Definition at line 120 of file Tools.hpp.


The documentation for this struct was generated from the following files: