9#ifndef __NODE_MERGER_HPP__
10#define __NODE_MERGER_HPP__
58 const bool only_if_improve_quality =
false,
59 const double move = 0,
const int line_search = 0,
60 Tag
th = NULL,
const int verb = 0);
79 const bool only_if_improve_quality =
false,
80 const double move = 0, Tag
th = NULL);
99 const bool only_if_improve_quality =
false,
100 const double move = 0, Tag
th = NULL);
109 typedef multi_index_container<
111 indexed_by<ordered_unique<
112 member<ParentChild, EntityHandle, &ParentChild::pArent>>,
114 member<ParentChild, EntityHandle, &ParentChild::cHild>>>>
141 double *coords_move,
double &min_quality, Tag
th = NULL,
142 boost::function<
double(
double,
double)> f =
143 [](
double a,
double b) ->
double {
return std::min(
a, b); });
166 typedef multi_index_container<
167 FaceMap, indexed_by<hashed_unique<composite_key<
168 FaceMap, member<FaceMap, EntityHandle, &FaceMap::n0>,
169 member<FaceMap, EntityHandle, &FaceMap::n1>>>>>
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
std::bitset< BITREFLEVEL_SIZE > BitRefLevel
Bit structure attached to each entity identifying to what mesh entity is attached.
implementation of Data Operators for Forces and Sources
FaceMap(const EntityHandle e, const EntityHandle n0, const EntityHandle n1)
ParentChild(const EntityHandle parent, const EntityHandle child)
Merge node by collapsing edge between them.
multi_index_container< ParentChild, indexed_by< ordered_unique< member< ParentChild, EntityHandle, &ParentChild::pArent > >, ordered_non_unique< member< ParentChild, EntityHandle, &ParentChild::cHild > > > > ParentChildMap
ParentChildMap parentChildMap
MoFEMErrorCode minQuality(Range &check_tests, EntityHandle father, EntityHandle mother, double *coords_move, double &min_quality, Tag th=NULL, boost::function< double(double, double)> f=[](double a, double b) -> double { return std::min(a, b);})
Calualte quality if nodes merged.
bool successMerge
True if marge is success.
boost::function< double(const double a, const double b)> minQualityFunction
bool getSuccessMerge()
Return true if successful merge.
MoFEMErrorCode mergeNodes(EntityHandle father, EntityHandle mother, Range &out_tets, Range *tets_ptr=NULL, const bool only_if_improve_quality=false, const double move=0, const int line_search=0, Tag th=NULL, const int verb=0)
merge nodes which sharing edge
bool errorIfNoCommonEdge
Send error if no common edge.
MoFEMErrorCode getSubInterfaceOptions()
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, UnknownInterface **iface) const
multi_index_container< FaceMap, indexed_by< hashed_unique< composite_key< FaceMap, member< FaceMap, EntityHandle, &FaceMap::n0 >, member< FaceMap, EntityHandle, &FaceMap::n1 > > > > > FaceMapIdx
void setErrorIfNoCommonEdge(const bool b=true)
Set error if no common edge.
MoFEMErrorCode lineSearch(Range &check_tests, EntityHandle father, EntityHandle mother, int line_search, FTensor::Tensor1< double, 3 > &t_move, Tag th=NULL)
Use bisection method to find point of edge collapse.
ParentChildMap & getParentChildMap()
Get map of parent cand child.
base class for all interface classes