v0.14.0
Loading...
Searching...
No Matches
Public Member Functions | Public Attributes | List of all members
FractureMechanics::CrackPropagation::FaceOrientation Struct Reference

Determine face orientation. More...

#include <users_modules/fracture_mechanics/src/CrackPropagation.hpp>

Inheritance diagram for FractureMechanics::CrackPropagation::FaceOrientation:
[legend]
Collaboration diagram for FractureMechanics::CrackPropagation::FaceOrientation:
[legend]

Public Member Functions

 FaceOrientation (bool crack_front, Range contact_faces, BitRefLevel bit_level)
 
virtual ~FaceOrientation ()
 
MoFEMErrorCode getElementOrientation (MoFEM::Interface &m_field, const EntityHandle face, const BitRefLevel bit)
 
MoFEMErrorCode getElementOrientation (MoFEM::Interface &m_field, const FEMethod *fe_method_ptr)
 
MoFEMErrorCode getElementOrientation (MoFEM::Interface &m_field, const EntityHandle face)
 
virtual MoFEMErrorCode getElementOrientation (MoFEM::Interface &m_field, const FEMethod *fe_method_ptr)
 
virtual MoFEMErrorCode getElementOrientation (MoFEM::Interface &m_field, const EntityHandle face)
 

Public Attributes

bool useProjectionFromCrackFront
 
Range contactFaces
 
BitRefLevel defaultBitLevel
 
- Public Attributes inherited from SurfaceSlidingConstrains::DriverElementOrientation
int elementOrientation
 

Detailed Description

Determine face orientation.

Definition at line 1003 of file CrackPropagation.hpp.

Constructor & Destructor Documentation

◆ FaceOrientation()

FractureMechanics::CrackPropagation::FaceOrientation::FaceOrientation ( bool  crack_front,
Range  contact_faces,
BitRefLevel  bit_level 
)
inline

◆ ~FaceOrientation()

virtual FractureMechanics::CrackPropagation::FaceOrientation::~FaceOrientation ( )
inlinevirtual

Definition at line 1012 of file CrackPropagation.hpp.

1012{}

Member Function Documentation

◆ getElementOrientation() [1/3]

MoFEMErrorCode FractureMechanics::CrackPropagation::FaceOrientation::getElementOrientation ( MoFEM::Interface m_field,
const EntityHandle  face 
)
inlinevirtual

Reimplemented from SurfaceSlidingConstrains::DriverElementOrientation.

Definition at line 1024 of file CrackPropagation.hpp.

1025 {
1029 }
#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
MoFEMErrorCode getElementOrientation(MoFEM::Interface &m_field, const EntityHandle face, const BitRefLevel bit)

◆ getElementOrientation() [2/3]

MoFEMErrorCode FractureMechanics::CrackPropagation::FaceOrientation::getElementOrientation ( MoFEM::Interface m_field,
const EntityHandle  face,
const BitRefLevel  bit 
)

Definition at line 9735 of file CrackPropagation.cpp.

9736 {
9738 elementOrientation = +1;
9739 Range adj_side_elems;
9740 CHKERR m_field.getInterface<BitRefManager>()->getAdjacencies(
9741 bit, &face, 1, 3, adj_side_elems, moab::Interface::INTERSECT, QUIET);
9742 adj_side_elems = adj_side_elems.subset_by_type(MBTET);
9743 if (adj_side_elems.empty()) {
9744 Range adj_tets_on_surface;
9745 BitRefLevel bit_tet_on_surface;
9746 bit_tet_on_surface.set(BITREFLEVEL_SIZE - 2);
9747 CHKERR m_field.getInterface<BitRefManager>()->getAdjacencies(
9748 bit_tet_on_surface, &face, 1, 3, adj_tets_on_surface,
9749 moab::Interface::INTERSECT, 0);
9750 adj_side_elems.insert(*adj_tets_on_surface.begin());
9751 }
9752 if (adj_side_elems.size() != 1) {
9753 adj_side_elems.clear();
9754 CHKERR m_field.getInterface<BitRefManager>()->getAdjacencies(
9755 bit, &face, 1, 3, adj_side_elems, moab::Interface::INTERSECT,
9756 VERY_NOISY);
9757 Range::iterator it = adj_side_elems.begin();
9758 for (; it != adj_side_elems.end(); it++) {
9759 Range nodes;
9760 CHKERR m_field.get_moab().get_connectivity(&*it, 1, nodes, true);
9761 PetscPrintf(PETSC_COMM_WORLD, "Connectivity %lu %lu %lu %lu\n", nodes[0],
9762 nodes[1], nodes[2], nodes[3]);
9763 }
9764 int rank;
9765 MPI_Comm_rank(m_field.get_comm(), &rank);
9766 if (rank == 0) {
9767 EntityHandle out_meshset;
9768 CHKERR m_field.get_moab().create_meshset(MESHSET_SET, out_meshset);
9769 CHKERR m_field.get_moab().add_entities(out_meshset, adj_side_elems);
9770 CHKERR m_field.get_moab().add_entities(out_meshset, &face, 1);
9771 CHKERR m_field.get_moab().write_file("debug_error.vtk", "VTK", "",
9772 &out_meshset, 1);
9773 CHKERR m_field.get_moab().delete_entities(&out_meshset, 1);
9774 }
9775 SETERRQ1(PETSC_COMM_SELF, MOFEM_DATA_INCONSISTENCY,
9776 "Expect 1 tet but is %u", adj_side_elems.size());
9777 }
9778 EntityHandle side_elem = adj_side_elems[0];
9779 if (side_elem != 0) {
9780 int side_number, sense, offset;
9781 CHKERR m_field.get_moab().side_number(side_elem, face, side_number, sense,
9782 offset);
9783 if (sense == -1) {
9784 elementOrientation = -1;
9785 }
9786 }
9787 if (useProjectionFromCrackFront || contactFaces.contains(Range(face, face))) {
9788 Tag th_interface_side;
9789 CHKERR m_field.get_moab().tag_get_handle("INTERFACE_SIDE",
9790 th_interface_side);
9791 int side;
9792 CHKERR m_field.get_moab().tag_get_data(th_interface_side, &face, 1, &side);
9793 if (side == 1) {
9794 elementOrientation = -1;
9795 }
9796 }
9798}
@ QUIET
Definition: definitions.h:208
@ VERY_NOISY
Definition: definitions.h:212
#define BITREFLEVEL_SIZE
max number of refinements
Definition: definitions.h:219
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
auto bit
set bit
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
Definition: Types.hpp:40
Managing BitRefLevels.
virtual moab::Interface & get_moab()=0
virtual MPI_Comm & get_comm() const =0
MoFEMErrorCode getInterface(IFACE *&iface) const
Get interface refernce to pointer of interface.

◆ getElementOrientation() [3/3]

MoFEMErrorCode FractureMechanics::CrackPropagation::FaceOrientation::getElementOrientation ( MoFEM::Interface m_field,
const FEMethod fe_method_ptr 
)
inlinevirtual

Reimplemented from SurfaceSlidingConstrains::DriverElementOrientation.

Definition at line 1016 of file CrackPropagation.hpp.

1017 {
1019 EntityHandle face = fe_method_ptr->numeredEntFiniteElementPtr->getEnt();
1020 BitRefLevel bit = fe_method_ptr->problemPtr->getBitRefLevel();
1021 CHKERR getElementOrientation(m_field, face, bit);
1023 }

Member Data Documentation

◆ contactFaces

Range FractureMechanics::CrackPropagation::FaceOrientation::contactFaces

Definition at line 1006 of file CrackPropagation.hpp.

◆ defaultBitLevel

BitRefLevel FractureMechanics::CrackPropagation::FaceOrientation::defaultBitLevel

Definition at line 1007 of file CrackPropagation.hpp.

◆ useProjectionFromCrackFront

bool FractureMechanics::CrackPropagation::FaceOrientation::useProjectionFromCrackFront

Definition at line 1005 of file CrackPropagation.hpp.


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