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