8#ifndef UGCORE_UGBASE_LIB_GRID_ALGORITHMS_EXTRUSION_SUPPORT3D_H_
9#define UGCORE_UGBASE_LIB_GRID_ALGORITHMS_EXTRUSION_SUPPORT3D_H_
42template<
typename ELEMTYP>
43bool addElem(std::vector<ELEMTYP> & knownElems, ELEMTYP elemToAdd )
47 for( ELEMTYP elmKnown : knownElems )
49 if( elemToAdd == elmKnown )
57 knownElems.push_back(elemToAdd);
66template<
typename ELEMTYP,
typename INDEX_TYP>
71 ElemInfo( ELEMTYP
const & elem, INDEX_TYP sudo )
72 : m_elem(elem), m_sudo(sudo)
95class VertexFractureQuadrupel
99 using ElemInfoFac = ElemInfo<FACETYP,INDEX_TYP>;
107 VertexFractureQuadrupel( ElemInfoFac
const & fracFaceInfo,
108 VOLUMETYP
const & attVolume,
109 NORMALTYP
const & normal,
110 std::pair<EDGETYP,EDGETYP>
const & volCutEdges,
111 std::pair<ElemInfoFac,ElemInfoFac>
const & volCutEdgeFaces )
112 : m_fracFaceInfo(fracFaceInfo),
113 m_attVolume(attVolume),
115 m_volCutEdges(volCutEdges),
116 m_volCutEdgeFaces(volCutEdgeFaces)
129 ElemInfo<FACETYP,INDEX_TYP> m_fracFaceInfo;
130 VOLUMETYP m_attVolume;
132 std::pair<EDGETYP,EDGETYP> m_volCutEdges;
133 std::pair<ElemInfoFac,ElemInfoFac> m_volCutEdgeFaces;
142 VertexFractureQuadrupel()
182 std::vector<bool> test;
184 test.push_back( lowElmOther.first == lowElmThis.first );
185 test.push_back( lowElmOther.second == lowElmThis.first );
186 test.push_back( lowElmOther.first == lowElmThis.second );
187 test.push_back( lowElmOther.second == lowElmThis.second );
189 INDEX_TXP countCorr = 0;
191 for(
auto const t : test )
201 UG_THROW(
"zu viele gleiche Ecken " << std::endl);
207 LOWDIMELM
const & specificLDE )
217 bool otherFirst = ( lowElmOther.first == specificLDE );
218 bool otherSecond = ( lowElmOther.second == specificLDE );
220 bool thisFirst = ( lowElmThis.first == specificLDE );
221 bool thisSecond = ( lowElmThis.second == specificLDE );
223 bool isPartOfThisFace = ( thisFirst || thisSecond );
224 bool isPartOfOtherFace = ( otherFirst || otherSecond );
226 if( ! isPartOfOtherFace || ! isPartOfThisFace )
228 UG_LOG(
"not part of one of the faces " << std::endl);
232 if( otherFirst && thisFirst )
234 if( lowElmOther.first == lowElmThis.first )
237 else if( otherFirst && thisSecond )
239 if( lowElmOther.first == lowElmThis.second )
242 else if( otherSecond && thisFirst )
244 if( lowElmOther.second == lowElmThis.first )
247 else if( otherSecond && thisSecond )
249 if( lowElmOther.second == lowElmThis.second )
272 UG_LOG(
"gleiches face aber andere Ecken???" << std::endl);
273 UG_THROW(
"gleiches face aber andere Ecken???" << std::endl);
289 if( ( epOne.first == epTwo.first && epOne.second == epTwo.second )
290 || ( epOne.first == epTwo.second && epOne.second == epTwo.first )
317typename SENKRECHTENTYP,
320class VertexFractureTripleMF
321:
public AttachedGeneralElem<MANIFOLDTYP,LOWDIMTYP,INDEXTYP>
325 using AttGenEl = AttachedGeneralElem<MANIFOLDTYP,LOWDIMTYP,INDEXTYP>;
329 using PairLowEl = std::pair<LOWDIMTYP,LOWDIMTYP>;
331 VertexFractureTripleMF( MANIFOLDTYP
const & manifElm, INDEXTYP sudo,
332 FULLDIMTYP
const & fullElm,
333 SENKRECHTENTYP
const & normal,
334 PairLowEl
const & pairLowElm )
336 AttGenEl(manifElm,pairLowElm),
337 m_sudo(sudo), m_fullElm(fullElm),
338 m_normal(normal), m_newNormal(normal)
346 INDEXTYP
const getSudoElm()
const {
return m_sudo; }
348 FULLDIMTYP
const getFullElm()
const {
return m_fullElm; }
350 SENKRECHTENTYP
const getNormal()
const {
return m_normal; }
355 void setNewNormal( SENKRECHTENTYP
const & chNorml ) { m_newNormal = chNorml; }
357 SENKRECHTENTYP
const getNewNormal()
const {
return m_newNormal; }
365 FULLDIMTYP m_fullElm;
366 SENKRECHTENTYP m_normal;
367 SENKRECHTENTYP m_newNormal;
370 VertexFractureTripleMF()
381template <
typename VRT,
typename IndTyp >
469 NORMAL_VEC
const & normalVec )
488 bool geomEqu = AttGenElm::testIfEquals(attElm);
492 INDEX_TXP sudoOther = attElm.
getSudo();
502 if( geomEqu && sudoOther == this->
m_sudo )
645 NORMAL_VEC
const & normalVec )
765 bool alreadyInList =
false;
769 if( sudo == availSudo )
770 alreadyInList =
true;
773 if( ! alreadyInList )
962 UG_THROW(
"zu viele subdomains crossing in one Punkt" << std::endl);
987typename FULLDIM_ELEM,
1030 FULLDIM_ELEM otherFullDimElm = otherFullDimElmInf.getFulldimElem();
1063 template <
typename NOGEN>
1067 template <
typename NOGEN>
1145 if( found && eraseFound )
1157 bool manifNeighbored =
false;
1162 manifNeighbored =
true;
1166 if( manifNeighbored && eraseFoundManif )
1171 return manifNeighbored;
1175 template <
typename NOGEN>
1183 if( found && shiftToUnclosedFracts )
1204 template <
typename NOGEN>
1350 typename = std::enable_if<std::is_same<Volume*,FULLDIM_ELEM>::value>,
1351 typename = std::enable_if<std::is_same<Face*,MANIFELM>::value>
1359 for( INDEX_TXP iFac = 0; iFac <
m_fullDimElm->num_faces(); iFac++ )
1366 if( fac == manifEl )
1379 template <
typename ATT_MANIF_ELM_INF >
1381 std::vector<ATT_MANIF_ELM_INF> & memVecManifElem,
1382 bool eraseFound =
true )
1386 for(
typename std::vector<ATT_MANIF_ELM_INF>::iterator afeiIter = memVecManifElem.begin();
1387 afeiIter != memVecManifElem.end();
1391 ATT_MANIF_ELM_INF & manifElmTest = *afeiIter;
1393 if( manifElemOther.testIfEquals(manifElmTest) )
1397 memVecManifElem.erase(afeiIter);
1408 template <
typename ATT_MANIF_ELM_INFO >
1410 std::vector<ATT_MANIF_ELM_INFO> & memVecManifElm,
1422 for(
auto const & me : memVecManifElm )
1424 if( manifElm.testIfEquals(me) )
1431 memVecManifElm.push_back(manifElm);
1444template<
typename VECTOR_TYP,
1453 template<typename = std::enable_if<std::is_same<VECTOR_TYP,vector3>::value>>
1467 template<typename = std::enable_if<std::is_same<VECTOR_TYP,vector3>::value>>
1469 VECTOR_TYP
const & baseVect,
1472 number scaleShiftNormal = 0
1484 UG_LOG(
"Ebenenkoordinatenform ");
1486 for(
int i = 0; i <
m_dim; i++ )
1488 m_rhs += normalVect[i]*baseVect[i];
1490 UG_LOG(
" + " << normalVect[i] <<
" x_" << i <<
" " );
1517 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value
1523 VECTOR_TYP shiftedBaseVect;
1528 UG_LOG(
"Ebenenkoordinatenform Shifted Plane " << std::endl);
1543 template<typename = std::enable_if<std::is_same<VECTOR_TYP,vector3>::value >>
1547 UG_LOG(
"Ebenenkoordinatenform Shifted Plane " << std::endl);
1553 UG_LOG(
"Neuer Manifold Descripter verschoben ohne Ecken" << std::endl);
1561 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>>
1564 VECTOR_TYP shiftVec;
1568 VECTOR_TYP shiftedBaseVec;
1572 return shiftedBaseVec;
1621typename FULLDIM_ELEM,
1661 template< typename = std::enable_if< std::is_pointer<LOWDIMELM>::value>
1717 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>,
1718 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>
1741 return static_cast<VrtxFracStatus>(
static_cast<INDEX_TXP
>(vfsFract) +
static_cast<INDEX_TXP
>(vfsBndry) );
1752 template<
typename NOFRACT >
1769 template<
typename NOFRACT >
1817 template<
typename NOFRACT >
1825 template<
typename NOFRACT >
1839 template< typename = std::enable_if< std::is_pointer<LOWDIMELM>::value>
1847 UG_LOG(
"Shift direction already set different " << std::endl);
1848 UG_THROW(
"Shift direction already set different " << std::endl);
1851 if( shiftDirectionElm !=
nullptr )
1860 template< typename = std::enable_if< std::is_pointer<LOWDIMELM>::value>
1893 UG_LOG(
"please average " << std::endl);
1894 UG_THROW(
"please average " << std::endl);
1903 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>>
1906 bool clearDescVec =
true
1959 UG_LOG(
"please average " << std::endl);
1960 UG_THROW(
"please average " << std::endl);
1969 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>>
1972 bool clearDescVec =
true
2012 template <
typename ATT_ELM,
typename VEC_ATT_ELM,
2013 typename = std::enable_if<std::is_same<std::vector<ATT_ELM>,VEC_ATT_ELM>::value>,
2014 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2016 bool isStillUnknown( ATT_ELM
const & afeNew, VEC_ATT_ELM
const & vecAttELm,
bool acceptUnknowns =
false )
2018 for( ATT_ELM
const & afeAlt : vecAttELm )
2020 if( afeAlt.testIfEquals(afeNew) )
2022 UG_LOG(
"Strange, already known?" << std::endl);
2023 if( ! acceptUnknowns )
2024 UG_THROW(
"Strange, already known?" << std::endl);
2033 template <
typename ATT_ELM,
2034 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2036 bool extractSudoList( std::vector<INDEX_TXP> & sudoListSegment, std::vector<ATT_ELM>
const & vecAttELm )
2040 INDEX_TXP sudoNeeded = me.getSudo();
2042 bool sudoIsKnown =
false;
2044 for( INDEX_TXP sudoInList : sudoListSegment )
2046 if( sudoInList == sudoNeeded )
2054 sudoListSegment.push_back(sudoNeeded);
2060 template <
typename ATT_ELM,
2061 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2067 std::vector<INDEX_TXP> sudoListSegment;
2071 for( INDEX_TXP sudo : sudoListSegment )
2073 VECTOR_TYP normlAvrg;
2078 std::pair<INDEX_TXP, VECTOR_TYP> sudoNorml( sudo, normlAvrg );
2080 vecPSudoNrml.push_back(sudoNorml);
2084 std::vector<LOWDIMELM> vecLowDimElmsSudo;
2091 vecPSudoVecLowDiElm.push_back( sudoLDE );
2098 template <
typename ATT_ELM,
2099 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2103 VECTOR_TYP normsSum(0,0,0);
2104 INDEX_TXP numContrNrmls = 0;
2106 for( ATT_ELM
const & ae : vecAttElm )
2108 INDEX_TXP sudoElm = ae.getSudo();
2110 if( specfcSudo == sudoElm )
2112 VECTOR_TYP normElm = ae.getNormalVec();
2114 VECTOR_TYP tmpSum = normsSum;
2116 VecAdd( normsSum, normElm, tmpSum );
2122 if( numContrNrmls == 0 )
2124 UG_LOG(
"Kein Beitrag in SUdo? " << std::endl);
2125 UG_THROW(
"Kein Beitrag in SUdo? " << std::endl);
2129 VecScale( normlAvrg, normsSum, 1. /
static_cast<number>(numContrNrmls) );
2135 template <
typename ATT_ELM,
2136 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2140 for( ATT_ELM
const & ae : vecAttElm )
2142 INDEX_TXP sudoElm = ae.getSudo();
2144 if( specfcSudo == sudoElm )
2146 std::pair<LOWDIMELM,LOWDIMELM> paLoDiEl = ae.getPairLowElm();
2148 addElem(vecLowDimElms, paLoDiEl.first);
2149 addElem(vecLowDimElms, paLoDiEl.second);
2171 UG_LOG(
"no boundary, no averaging");
2178 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2180 bool schluckVecAttElm( std::vector<ATT_ELM>
const & vecAttElNew, std::vector<ATT_ELM> & vecAttElmKnown,
bool acceptUnknowns =
false )
2182 bool allUnknown =
true;
2184 for( ATT_ELM
const & aeN : vecAttElNew )
2186 if( !
schluckAttElm( aeN, vecAttElmKnown, acceptUnknowns ) )
2189 UG_LOG(
"ist schon bekannt" << std::endl);
2190 if( ! acceptUnknowns)
2191 UG_THROW(
"ist schon bekannt" << std::endl);
2201 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2203 bool schluckAttElm( ATT_ELM
const & attElNew, std::vector<ATT_ELM> & vecAttElmKnown,
bool acceptUnknowns =
false )
2207 if( !
isStillUnknown( attElNew, vecAttElmKnown, acceptUnknowns ) )
2209 UG_LOG(
"ist schon bekannt" << std::endl);
2210 if( ! acceptUnknowns )
2211 UG_THROW(
"ist schon bekannt" << std::endl);
2215 vecAttElmKnown.push_back(attElNew);
2224 UG_LOG(
"gibts keine Bndry " << std::endl);
2225 UG_THROW(
"gibts keine Bndry " << std::endl);
2234 template<
typename ManifDescr::ManifoldType manifTyp,
2235 typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>
2241 bool clearDescVec =
true
2246 UG_LOG(
"please average " << std::endl);
2247 UG_THROW(
"please average " << std::endl);
2252 vecManifDesc.clear();
2256 VECTOR_TYP posVrt = aaPos[
m_vrt];
2258 int sudo = psn.first;
2259 VECTOR_TYP normlVec = psn.second;
2269 UG_LOG(
"ASSIGN MANIF TYP " << manifTyp << std::endl);
2270 ManifDescr manifDesc( normlVec, posVrt, sudo, manifTyp );
2276 UG_LOG(
"No low dim elems " << std::endl);
2277 UG_THROW(
"No low dim elems " << std::endl);
2281 vecManifDesc.push_back( manifDesc );
2289 INDEX_TXP foundSudo = 0;
2293 INDEX_TXP sudoFract = psvlde.first;
2295 if( sudoFract == sudo )
2299 std::vector<LOWDIMELM>
const & vecLoDiEl = psvlde.second;
2301 if( ! md.schluckLowDimElms( vecLoDiEl ) )
2303 UG_LOG(
"NO LOWDIM ELEMS" << std::endl);
2309 if( foundSudo != 1 )
2311 UG_LOG(
"NO SUDO FOUND LDE" << std::endl);
2314 return ( foundSudo == 1 );
2319 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>,
2320 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>
2326 for(
size_t i_edge = 0; i_edge < fe->num_edges(); ++i_edge)
2328 LOWDIMELM lowDimElm = grid.
get_edge( fe, i_edge );
2349template <
typename VEC_AVEI,
typename OPERATION,
typename INDX_TYP >
2350bool switchFulldimInfo( VEC_AVEI & vecAttVolElemInfoCop,
2351 VEC_AVEI
const & vecAttVolElemInfo,
2352 VEC_AVEI & segmentAVEI,
2354 INDX_TYP switchInd = 0
2357 auto & startVolInfoThisSegment = vecAttVolElemInfoCop[switchInd];
2359 auto const & startVol = startVolInfoThisSegment.opera();
2361 for(
auto & possibleOrigVolInfo : vecAttVolElemInfo )
2363 auto const & possVol = possibleOrigVolInfo.opera();
2365 if( possVol == startVol )
2367 segmentAVEI().push_back(possibleOrigVolInfo);
2372 if( segmentAVEI().size() != 1 )
2374 UG_LOG(
"No start volume reconstructible " << std::endl);
2375 UG_THROW(
"No start volume reconstructible " << std::endl);
2379 if( ! vecAttVolElemInfoCop.erase( vecAttVolElemInfoCop.begin() + switchInd ) )
2415 template< typename = std::enable_if< std::is_pointer<MANIFEL>::value>,
2416 typename = std::enable_if< std::is_pointer<VRTXTYP>::value>
2419 MANIFEL
const & endingFractManifCutting,
2420 std::vector<MANIFEL>
const & vecEndingFractManifNotCutting,
2421 LOWDIMEL
const & oldLowDimElCut,
2422 ManifelPair const & pairNeighbouredFractClosedManifEl,
2423 LOWDIMEL
const & shiftDirectionElm,
2424 std::vector<LOWDIMEL>
const & vecLowDimElmsOfNotCuttingManifs,
2425 INDEXTYP sudoFractEnding,
2426 INDEXTYP sudoFractNotEnding
2446 template< typename = std::enable_if< std::is_pointer<MANIFEL>::value>,
2447 typename = std::enable_if< std::is_pointer<VRTXTYP>::value>
2451 MANIFEL
const & endingFractManifCutting,
2452 LOWDIMEL
const & oldLowDimElCut,
2453 ManifelPair const & pairNeighbouredFractClosedManifEl,
2454 LOWDIMEL
const & shiftDirectionElm,
2455 int sudoFractEnding,
2456 int sudoFractNotEnding
2476 template< typename = std::enable_if< std::is_pointer<MANIFEL>::value>,
2477 typename = std::enable_if< std::is_pointer<LOWDIMEL>::value>,
2478 typename = std::enable_if< std::is_pointer<VRTXTYP>::value>,
2479 typename = std::enable_if< std::is_integral<INDEXTYP>::value>
2508 UG_LOG(
"Shift Vertex already set different " << std::endl);
2509 UG_THROW(
"Shift Vertex already set different " << std::endl);
2513 if( shiftVrtx !=
nullptr )
2649 template< typename = std::enable_if< std::is_pointer<LOWDIMEL>::value>
2704 template <
typename ELEMTYP>
2705 bool schluckElem( ELEMTYP
const & anotherEl, std::vector<ELEMTYP> & vecElmKnown )
2707 bool elemNotKnown =
true;
2709 for( ELEMTYP me : vecElmKnown )
2711 if( me == anotherEl )
2713 elemNotKnown =
false;
2719 vecElmKnown.push_back(anotherEl);
2721 return elemNotKnown;
2724 template <
typename ELEMTYP>
2725 bool schluckVecElem( std::vector<ELEMTYP>
const & anotherVecEl, std::vector<ELEMTYP> & vecElmKnown )
2727 bool someElemsUnknown =
false;
2729 for( ELEMTYP me : anotherVecEl )
2733 someElemsUnknown =
true;
2737 return someElemsUnknown;
Faces are 2-dimensional objects.
Definition grid_base_objects.h:510
Manages the elements of a grid and their interconnection.
Definition grid.h:132
Edge * get_edge(Vertex *v1, Vertex *v2)
returns the edge between v1 and v2, if it exists. Returns NULL if not.
Definition grid.cpp:1069
Face * get_face(const FaceVertices &fv)
returns the face that is described by fv.
Definition grid.cpp:1135
Definition support3D.h:632
AttachedFractElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttFractElm
Definition support3D.h:638
std::pair< LOWDIMELM, LOWDIMELM > PairLowEl
Definition support3D.h:634
AttachedBoundryElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttBndryElm
Definition support3D.h:636
AttachedBoundryElem(MANIFELM const &manifElm, PairLowEl &lowElm, INDEX_TXP sudo, NORMAL_VEC const &normalVec)
Definition support3D.h:642
Definition support3D.h:457
AttachedFractElem(MANIFELM const &manifElm, PairLowEl &lowElm, INDEX_TXP sudo, NORMAL_VEC const &normalVec)
Definition support3D.h:466
INDEX_TXP const getSudo() const
Definition support3D.h:481
AttachedGeneralElem< MANIFELM, LOWDIMELM, INDEX_TXP > AttGenElm
Definition support3D.h:463
NORMAL_VEC const getNormalVec() const
Definition support3D.h:483
bool const testIfEquals(AttFractElm const &attElm) const
Definition support3D.h:485
NORMAL_VEC m_normalVec
Definition support3D.h:616
INDEX_TXP m_sudo
Definition support3D.h:615
std::pair< LOWDIMELM, LOWDIMELM > PairLowEl
Definition support3D.h:459
Definition support3D.h:994
bool fullDimElmContainsManif(MANIFELM const &manifEl, Grid &grid)
Definition support3D.h:1355
bool addFractManifElem(AttachedFractManifElemInfo const &manifFractElm, Grid &grid)
Definition support3D.h:1043
VecAttachedFractManifElemInfo const getVecFractManifElem() const
Definition support3D.h:1119
bool const searchBndryManifElem(AttachedBndryManifElemInfo const &manifBndryElemOther)
Definition support3D.h:1207
bool addBndryManifElem(AttachedBndryManifElemInfo const &manifBndryElm, Grid &grid)
Definition support3D.h:1055
bool const searchFractManifElem(NOGEN const &manifFractElemOther, bool shiftToGeneral)=delete
bool m_elementMarked
Definition support3D.h:1317
AttachedFullDimElemInfo(FULLDIM_ELEM const &fullDimElm)
Definition support3D.h:1008
std::vector< AttachedBndryManifElemInfo > VecAttachedBndryManifElemInfo
Definition support3D.h:1004
bool addManifElem(ATT_MANIF_ELM_INFO const &manifElm, std::vector< ATT_MANIF_ELM_INFO > &memVecManifElm, Grid &grid)
Definition support3D.h:1409
VecAttachedFractManifElemInfo m_vecFractManifElm
Definition support3D.h:1319
std::vector< AttachedFractManifElemInfo > VecAttachedFractManifElemInfo
Definition support3D.h:1002
bool const hasUnclosedFracture() const
Definition support3D.h:1041
VecAttachedFractManifElemInfo m_vecUnclosedFractManifElm
Definition support3D.h:1321
std::vector< AttachedGenerManifElemInfo > VecAttachedGenerManifElemInfo
Definition support3D.h:1003
AttachedBoundryElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttachedBndryManifElemInfo
Definition support3D.h:1000
FULLDIM_ELEM m_fullDimElm
Definition support3D.h:1315
bool const hasFracture() const
Definition support3D.h:1039
AttachedFullDimElemInfo< FULLDIM_ELEM, MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttFullDimElmInfo
Definition support3D.h:1006
bool const searchFractManifElem(AttachedFractManifElemInfo const &manifFractElemOther, bool shiftToUnclosedFracts=true)
Definition support3D.h:1179
VecAttachedFractManifElemInfo const getVecUnclosedFractManifElem() const
Definition support3D.h:1124
VecAttachedBndryManifElemInfo m_vecBndryManifElm
Definition support3D.h:1331
VecAttachedBndryManifElemInfo const getVecBndryManifElem() const
Definition support3D.h:1135
bool searchGenerManifElem(NOGEN const &manifGenerElemOther, bool eraseFound)=delete
AttachedGeneralElem< MANIFELM, LOWDIMELM, INDEX_TXP > AttachedGenerManifElemInfo
Definition support3D.h:999
bool const searchManifElem(ATT_MANIF_ELM_INF const &manifElemOther, std::vector< ATT_MANIF_ELM_INF > &memVecManifElem, bool eraseFound=true) const
Definition support3D.h:1380
bool addBndryManifElem(NOGEN const &noGener, Grid &grid)=delete
bool const isMarked() const
Definition support3D.h:1035
FULLDIM_ELEM const getFulldimElem() const
Definition support3D.h:1022
VecAttachedGenerManifElemInfo m_vecGenerManifElm
Definition support3D.h:1329
bool addGenerManifElem(AttachedGenerManifElemInfo const &manifGenerElm, Grid &grid)
Definition support3D.h:1048
VecAttachedGenerManifElemInfo const getVecGenerManifElem() const
Definition support3D.h:1130
bool const hasSameFulldimElem(AttFullDimElmInfo const &otherFullDimElmInf) const
Definition support3D.h:1027
bool const searchGenerManifElem(AttachedGenerManifElemInfo const &manifGenerElemOther, bool eraseFound=true)
Definition support3D.h:1141
bool const testFullDimElmNeighbour(AttFullDimElmInfo const &attFullDimElmInfOther, bool eraseFoundManif=true)
Definition support3D.h:1153
void markIt()
Definition support3D.h:1037
bool addGenerManifElem(NOGEN const &noGener, Grid &grid)=delete
AttachedFractElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttachedFractManifElemInfo
Definition support3D.h:998
Definition support3D.h:154
bool const hasSameEdgePair(PairLowEl const &epTwo) const
Definition support3D.h:285
MANIFELM m_manifElm
Definition support3D.h:282
bool const testIfEquals(AttGenElm const &attElm) const
Definition support3D.h:256
bool const isNeighboured(AttGenElm const &attElm) const
Definition support3D.h:173
PairLowEl m_pairLowElm
Definition support3D.h:283
std::pair< LOWDIMELM, LOWDIMELM > PairLowEl
Definition support3D.h:156
PairLowEl const getPairLowElm() const
Definition support3D.h:171
AttachedGeneralElem(MANIFELM const &manifElm, PairLowEl const &lowElm)
Definition support3D.h:161
MANIFELM const getManifElm() const
Definition support3D.h:169
bool const isNeighbouredAtSpecificSide(AttGenElm const &attElm, LOWDIMELM const &specificLDE) const
Definition support3D.h:206
Definition support3D.h:383
void addShiftVrtx(VRT const &vrt, bool isAtFreeSide=false)
Definition support3D.h:399
std::vector< std::pair< VRT, bool > > getVecShiftedVrtsWithTypInfo() const
Definition support3D.h:424
FracTypVol getFracTyp() const
Definition support3D.h:397
IndTyp m_numberAtFreeSide
Definition support3D.h:439
VRT getCrossVertex() const
Definition support3D.h:395
std::vector< VRT > getVecShiftedVrts() const
Definition support3D.h:419
VRT m_crossVrt
Definition support3D.h:435
std::vector< VRT > m_vecShiftedVrts
Definition support3D.h:436
std::vector< std::pair< VRT, bool > > m_vecShiftedVrtsWithTypInf
Definition support3D.h:437
void setShiftVrtx(std::vector< VRT > const &vecVrt)
Definition support3D.h:417
FracTypVol m_fracTyp
Definition support3D.h:438
CrossingVertexInfoVol(VRT const &crossVrt, FracTypVol fracTyp)
Definition support3D.h:387
Definition support3D.h:2399
std::vector< MANIFEL > const spuckVecEndingFractManifNotCutting() const
Definition support3D.h:2618
std::pair< MANIFEL, MANIFEL > ManifelPair
Definition support3D.h:2413
INDEXTYP const spuckSudoFractEnding() const
Definition support3D.h:2638
MANIFEL m_hiddenCutManifEl
Definition support3D.h:2702
ManifelPair const spuckPairNeighbouredFractClosedManifEl() const
Definition support3D.h:2633
bool isEndingCleft()
Definition support3D.h:2539
LOWDIMEL const spuckOldLowDimElCut() const
Definition support3D.h:2623
bool schluckVecFulldimElm(std::vector< FULLDIMEL > const &vecFuDiEl)
Definition support3D.h:2559
std::vector< MANIFEL > m_vecClosedFracManifElNoNeighbr
Definition support3D.h:2686
EndingCrossingFractSegmentInfo(VRTXTYP const &vrt, MANIFEL const &endingFractManifCutting, std::vector< MANIFEL > const &vecEndingFractManifNotCutting, LOWDIMEL const &oldLowDimElCut, ManifelPair const &pairNeighbouredFractClosedManifEl, LOWDIMEL const &shiftDirectionElm, std::vector< LOWDIMEL > const &vecLowDimElmsOfNotCuttingManifs, INDEXTYP sudoFractEnding, INDEXTYP sudoFractNotEnding)
Definition support3D.h:2418
VRTXTYP m_unclosedVrtx
Definition support3D.h:2678
bool schluckFulldimElm(FULLDIMEL const &fuDiEl)
Definition support3D.h:2554
std::vector< FULLDIMEL > m_vecFulldimEl
Definition support3D.h:2698
VRTXTYP const spuckShiftVrtx() const
Definition support3D.h:2527
LOWDIMEL m_shiftDirectionElm
Definition support3D.h:2693
MANIFEL m_endingFractManifCutting
Definition support3D.h:2679
bool schluckHiddenCutFractManifEl(MANIFEL const &manifel)
Definition support3D.h:2656
VRTXTYP m_shiftVrtx
Definition support3D.h:2700
std::vector< MANIFEL > const spuckVecClosedFracManifElNoNeighbr() const
Definition support3D.h:2608
INDEXTYP m_sudoFractEnding
Definition support3D.h:2695
bool schluckShiftVrtx(VRTXTYP const &shiftVrtx)
Definition support3D.h:2501
bool schluckVecClosedFracManifElNoNeighbr(std::vector< MANIFEL > const &vecClosFracME)
Definition support3D.h:2549
std::vector< LOWDIMEL > const spuckVecLowDimElmsOfNotCuttingManifs()
Definition support3D.h:2628
MANIFEL const spuckEndingFractManifCutting() const
Definition support3D.h:2613
VRTXTYP const spuckUnclosedVrtx() const
Definition support3D.h:2603
std::vector< LOWDIMEL > m_vecLowDimElmsOfNotCuttingManifs
Definition support3D.h:2691
bool schluckVecElem(std::vector< ELEMTYP > const &anotherVecEl, std::vector< ELEMTYP > &vecElmKnown)
Definition support3D.h:2725
bool schluckClosedFracManifElNoNeighbr(MANIFEL const &closFracME)
Definition support3D.h:2543
MANIFEL const spuckHiddenCutFractManifEl() const
Definition support3D.h:2667
EndingCrossingFractSegmentInfo()
Definition support3D.h:2482
std::vector< FULLDIMEL > const spuckVecFulldimEl() const
Definition support3D.h:2641
ManifelPair m_pairNeighbouredFractClosedManifEl
Definition support3D.h:2683
INDEXTYP const spuckSudoFractNotEnding() const
Definition support3D.h:2639
bool m_isEndingCleft
Definition support3D.h:2674
std::vector< MANIFEL > m_vecEndingFractManifNotCutting
Definition support3D.h:2681
INDEXTYP m_sudoFractNotEnding
Definition support3D.h:2696
EndingCrossingFractSegmentInfo(VRTXTYP const &vrt, MANIFEL const &endingFractManifCutting, LOWDIMEL const &oldLowDimElCut, ManifelPair const &pairNeighbouredFractClosedManifEl, LOWDIMEL const &shiftDirectionElm, int sudoFractEnding, int sudoFractNotEnding)
Definition support3D.h:2450
LOWDIMEL m_oldLowDimElCut
Definition support3D.h:2688
LOWDIMEL const spuckLowdimElmShiftDirection() const
Definition support3D.h:2651
bool schluckElem(ELEMTYP const &anotherEl, std::vector< ELEMTYP > &vecElmKnown)
Definition support3D.h:2705
Definition support3D.h:1448
ManifoldType const spuckManifTyp() const
Definition support3D.h:1502
number const spuckScaleShiftNormal() const
Definition support3D.h:1504
VECTOR_TYP m_normalVect
Definition support3D.h:1589
bool spuckPlaneShifted(ManifoldDescriptor &manifoldDescr)
Definition support3D.h:1544
int const spuckSudo() const
Definition support3D.h:1500
int m_dim
Definition support3D.h:1596
number const & spuckRHS() const
Definition support3D.h:1515
void schluckScaleShiftNormal(number scaleShiftNormal)
Definition support3D.h:1510
VECTOR_TYP const & spuckBaseVector() const
Definition support3D.h:1498
ManifoldType
Definition support3D.h:1451
@ isBoundary
Definition support3D.h:1451
@ isArtificial
Definition support3D.h:1451
@ isFracture
Definition support3D.h:1451
ManifoldType m_manifTyp
Definition support3D.h:1598
std::vector< LOWDIMELM > m_lowDimElms
Definition support3D.h:1600
bool spuckPlaneShiftedAlong(VECTOR_TYP const &shiftVec, ManifoldDescriptor &manifoldDescr)
Definition support3D.h:1521
bool schluckLowDimElms(std::vector< LOWDIMELM > const &lowDimElms)
Definition support3D.h:1575
void schluckManifTyp(ManifoldType manifTyp)
Definition support3D.h:1508
ManifoldDescriptor(VECTOR_TYP const &normalVect, VECTOR_TYP const &baseVect, int sudo=-1, ManifoldType manifTyp=isArtificial, number scaleShiftNormal=0)
Definition support3D.h:1468
VECTOR_TYP spuckShiftedBaseVect()
Definition support3D.h:1562
VECTOR_TYP m_baseVect
Definition support3D.h:1590
ManifoldDescriptor()
Definition support3D.h:1455
number m_scaleShiftNormal
Definition support3D.h:1592
bool const spuckLowDimElms(std::vector< LOWDIMELM > &lowDimElms) const
Definition support3D.h:1581
number m_rhs
Definition support3D.h:1591
int m_sudo
Definition support3D.h:1597
void schluckSudo(int sudo)
Definition support3D.h:1506
VECTOR_TYP const & spuckNormalVector() const
Definition support3D.h:1497
Definition support3D.h:1629
bool averageAll()
Definition support3D.h:1873
bool schluckVecAttUnclosedFractElm(std::vector< AttFractElm > const &vecAtFracEl)
Definition support3D.h:1812
VecPairSudoVecLowDiEl m_vecBndrySudoLowDiEl
Definition support3D.h:1997
VRTXTYP const spuckVertex() const
Definition support3D.h:1696
VecAttFractElm m_vecAttFractElms
Definition support3D.h:1986
VecAttBndryElm m_vecAttBndryElms
Definition support3D.h:1989
bool const addLowDimElmListForSudo(ManifDescr &md, INDEX_TXP sudo, VecPairSudoVecLowDiEl const &vecFractSudosLDE) const
Definition support3D.h:2287
std::vector< LOWDIMELM > m_vecVolEdges
Definition support3D.h:2006
std::vector< PairSudoVecLowDiEl > VecPairSudoVecLowDiEl
Definition support3D.h:1647
std::pair< INDEX_TXP, std::vector< LOWDIMELM > > PairSudoVecLowDiEl
Definition support3D.h:1646
bool schluckAttUnclosedFractElm(AttFractElm const &afeNew)
Definition support3D.h:1820
bool schluckFulldimElem(FULLDIM_ELEM const &fudielm)
Definition support3D.h:1701
bool schluckVecAttElm(std::vector< ATT_ELM > const &vecAttElNew, std::vector< ATT_ELM > &vecAttElmKnown, bool acceptUnknowns=false)
Definition support3D.h:2180
bool const hasUnclosedFaces() const
Definition support3D.h:1834
bool schluckAttElm(ATT_ELM const &attElNew, std::vector< ATT_ELM > &vecAttElmKnown, bool acceptUnknowns=false)
Definition support3D.h:2203
bool m_averaged
Definition support3D.h:2001
void determineListLowdimElms(Grid &grid)
Definition support3D.h:2322
ManifoldDescriptor< VECTOR_TYP, LOWDIMELM > ManifDescr
Definition support3D.h:1649
bool schluckAttFractElm(NOFRACT const &afeNew)=delete
bool schluckVecAttFractElm(std::vector< AttFractElm > const &vecAtFracEl)
Definition support3D.h:1747
VRTXTYP m_vrt
Definition support3D.h:1982
bool schluckVecAttUnclosedFractElm(std::vector< NOFRACT > const &vecAtFracEl)=delete
AttachedBoundryElem< MANIFELM, LOWDIMELM, INDEX_TXP, VECTOR_TYP > AttBndryElm
Definition support3D.h:1638
bool schluckLowdimElmShiftDirectionIfUnclosedFractPresent(LOWDIMELM const &shiftDirectionElm)
Definition support3D.h:1841
bool const isBoundary() const
Definition support3D.h:1694
bool extractSudoList(std::vector< INDEX_TXP > &sudoListSegment, std::vector< ATT_ELM > const &vecAttELm)
Definition support3D.h:2036
bool schluckVecAttFractElm(std::vector< NOFRACT > const &vecAtFracEl)=delete
bool extractLowDimElemsForSpecificSudo(INDEX_TXP specfcSudo, std::vector< ATT_ELM > const &vecAttElm, std::vector< LOWDIMELM > &vecLowDimElms)
Definition support3D.h:2138
std::vector< ManifDescr > VecManifDescr
Definition support3D.h:1650
std::vector< AttBndryElm > VecAttBndryElm
Definition support3D.h:1641
bool isStillUnknown(ATT_ELM const &afeNew, VEC_ATT_ELM const &vecAttELm, bool acceptUnknowns=false)
Definition support3D.h:2016
bool const spuckVecFulldimElem(std::vector< FULLDIM_ELEM > &fudielm) const
Definition support3D.h:1708
bool const spuckManifDescr(VecManifDescr &vecManifDesc, Grid::VertexAttachmentAccessor< APosition > const &aaPos, VecPairSudoNormlV const &vecFractSudosNormlV, VecPairSudoVecLowDiEl const &vecFractSudosLDE, bool clearDescVec=true) const
Definition support3D.h:2237
std::pair< INDEX_TXP, VECTOR_TYP > PairSudoNormlV
Definition support3D.h:1643
bool schluckVecAttBndryElm(std::vector< AttBndryElm > const &vecAtBndryEl)
Definition support3D.h:1780
SegmentSides(VRTXTYP const &vrt, bool isBndry=false)
Definition support3D.h:1663
bool schluckAttUnclosedFractElm(NOFRACT const &afeNew)=delete
VecPairSudoNormlV m_vecBndrySudosNormlV
Definition support3D.h:1994
bool const spuckLowdimElmShiftDirectionIfUnclosedFractPresent(LOWDIMELM &shiftDirectionElm) const
Definition support3D.h:1862
std::vector< FULLDIM_ELEM > m_contribFulldimElm
Definition support3D.h:2003
bool schluckAttBndryElm(AttBndryElm const &afeNew)
Definition support3D.h:1788
bool m_isBoundary
Definition support3D.h:2000
bool spuckListLowdimElmsOfVols(std::vector< LOWDIMELM > &listLowdimElms, Grid &grid)
Definition support3D.h:1720
bool averageBndryNormals()
Definition support3D.h:2163
VrtxFracStatus
Definition support3D.h:1632
@ twoFracSuDoAtt
Definition support3D.h:1634
@ noFracSuDoAtt
Definition support3D.h:1632
@ threeFracSuDoAtt
Definition support3D.h:1635
@ oneFracSuDoAtt
Definition support3D.h:1633
std::vector< AttFractElm > VecAttFractElm
Definition support3D.h:1640
bool averageFractNormals()
Definition support3D.h:2158
bool const spuckVecAttUnclosedFractElm(std::vector< AttFractElm > &vecAttFracEl) const
Definition support3D.h:1828
bool const spuckVecAttFractElm(std::vector< AttFractElm > &vecAttFracEl) const
Definition support3D.h:1774
VecPairSudoVecLowDiEl m_vecFractSudoLowDiEl
Definition support3D.h:1996
LOWDIMELM m_shiftDirectionIfUnclosedFractPresent
Definition support3D.h:1984
bool m_volEdgesDetermined
Definition support3D.h:2005
bool const spuckFractManifDescr(VecManifDescr &vecManifDesc, Grid::VertexAttachmentAccessor< APosition > const &aaPos, bool clearDescVec=true) const
Definition support3D.h:1904
bool const spuckBndryManifDescr(VecManifDescr &vecManifDesc, Grid::VertexAttachmentAccessor< APosition > const &aaPos, bool clearDescVec=true) const
Definition support3D.h:1970
bool averageNormalForSpecificSudo(INDEX_TXP specfcSudo, std::vector< ATT_ELM > const &vecAttElm, VECTOR_TYP &normlAvrg)
Definition support3D.h:2101
bool const spuckFractSudoNormls(VecPairSudoNormlV &vecFractSudosNormlV) const
Definition support3D.h:1889
bool averageNormlForEachSudo(std::vector< ATT_ELM > const &vecAttElm, VecPairSudoNormlV &vecPSudoNrml, VecPairSudoVecLowDiEl &vecPSudoVecLowDiElm)
Definition support3D.h:2063
VrtxFracStatus const spuckCrossingTyp() const
Definition support3D.h:1733
VecAttFractElm m_vecAttUnclosedFractElms
Definition support3D.h:1987
bool checkIfIsAtBndry()
Definition support3D.h:2220
VecPairSudoNormlV m_vecFractSudosNormlV
Definition support3D.h:1993
bool spuckBndrySudoNormls(VecPairSudoNormlV &vecBndrySudosNormlV)
Definition support3D.h:1952
std::vector< PairSudoNormlV > VecPairSudoNormlV
Definition support3D.h:1644
bool spuckVecAttBndryElm(std::vector< AttBndryElm > &vecAtBndryEl)
Definition support3D.h:1805
bool schluckAttFractElm(AttFractElm const &afeNew)
Definition support3D.h:1755
Definition support3D.h:670
std::vector< T > m_sudoList
Definition support3D.h:944
T m_numberCountedFracsInVertex
Definition support3D.h:938
VrtxFracStatus getVrtxFracStatus()
Definition support3D.h:756
std::vector< T > const getSudoList() const
Definition support3D.h:782
std::pair< T, bool > pairTB
Definition support3D.h:673
bool adaptVrtxFracStatus()
Definition support3D.h:957
VrtxFracStatus
Definition support3D.h:683
@ noFracSuDoAtt
Definition support3D.h:683
@ threeFracSuDoAtt
Definition support3D.h:686
@ twoFracSuDoAtt
Definition support3D.h:685
@ oneFracSuDoAtt
Definition support3D.h:684
T getNumberFracEdgesInVertex()
Definition support3D.h:719
void setIsBndFracVertex(bool iBDV=true)
Definition support3D.h:698
VertexFracturePropertiesVol & operator++(int a)
Definition support3D.h:749
std::vector< pairTB > VecPairTB
Definition support3D.h:674
bool getIsBndFracVertex()
Definition support3D.h:708
bool addFractSudo(T const &sudo)
Definition support3D.h:763
bool m_isBndFracVertex
Definition support3D.h:937
static VrtxFracStatus constexpr m_maxStatus
Definition support3D.h:942
bool setSudoList(std::vector< T > const &sudoList)
Definition support3D.h:973
bool setVrtxFracStatus(VrtxFracStatus status)
Definition support3D.h:947
VertexFracturePropertiesVol()
Definition support3D.h:688
VrtxFracStatus m_status
Definition support3D.h:940
void setNumberCrossingFracsInVertex(T const &nCFIV)
Definition support3D.h:703
#define VRT(locInd)
Definition file_io_vtu.cpp:713
bool EdgeContains(EdgeVertices *e, Vertex *vrt)
Definition grid_util_impl.hpp:45
#define UG_THROW(msg)
Definition error.h:57
#define UG_LOG(msg)
Definition log.h:367
double number
Definition types.h:124
void VecAdd(vector_t &vOut, const vector_t &v1, const vector_t &v2)
adds two MathVector<N>s and stores the result in a third one
Definition math_vector_functions_common_impl.hpp:185
void VecScale(vector_t &vOut, const vector_t &v, typename vector_t::value_type s)
scales a MathVector<N>
Definition math_vector_functions_common_impl.hpp:252
Definition smart_pointer.h:814
bool addElem(std::vector< ELEMTYP > &knownElems, ELEMTYP elemToAdd)
Definition support3D.h:43
FracTypVol
Definition support3D.h:379
@ SingleFrac
Definition support3D.h:379
@ TEnd
Definition support3D.h:379
@ XCross
Definition support3D.h:379