8#ifndef UGCORE_UGBASE_LIB_GRID_ALGORITHMS_EXTRUSION_SUPPORT3D_H_
9#define UGCORE_UGBASE_LIB_GRID_ALGORITHMS_EXTRUSION_SUPPORT3D_H_
39template<
typename ELEMTYP>
40bool addElem(std::vector<ELEMTYP> & knownElems, ELEMTYP elemToAdd )
44 for( ELEMTYP elmKnown : knownElems )
46 if( elemToAdd == elmKnown )
54 knownElems.push_back(elemToAdd);
63template<
typename ELEMTYP,
typename INDEX_TYP>
68 ElemInfo( ELEMTYP
const & elem, INDEX_TYP sudo )
69 : m_elem(elem), m_sudo(sudo)
92class VertexFractureQuadrupel
96 using ElemInfoFac = ElemInfo<FACETYP,INDEX_TYP>;
104 VertexFractureQuadrupel( ElemInfoFac
const & fracFaceInfo,
105 VOLUMETYP
const & attVolume,
106 NORMALTYP
const & normal,
107 std::pair<EDGETYP,EDGETYP>
const & volCutEdges,
108 std::pair<ElemInfoFac,ElemInfoFac>
const & volCutEdgeFaces )
109 : m_fracFaceInfo(fracFaceInfo),
110 m_attVolume(attVolume),
112 m_volCutEdges(volCutEdges),
113 m_volCutEdgeFaces(volCutEdgeFaces)
126 ElemInfo<FACETYP,INDEX_TYP> m_fracFaceInfo;
127 VOLUMETYP m_attVolume;
129 std::pair<EDGETYP,EDGETYP> m_volCutEdges;
130 std::pair<ElemInfoFac,ElemInfoFac> m_volCutEdgeFaces;
139 VertexFractureQuadrupel()
179 std::vector<bool> test;
181 test.push_back( lowElmOther.first == lowElmThis.first );
182 test.push_back( lowElmOther.second == lowElmThis.first );
183 test.push_back( lowElmOther.first == lowElmThis.second );
184 test.push_back( lowElmOther.second == lowElmThis.second );
186 INDEX_TXP countCorr = 0;
188 for(
auto const t : test )
198 UG_THROW(
"zu viele gleiche Ecken " << std::endl);
204 LOWDIMELM
const & specificLDE )
214 bool otherFirst = ( lowElmOther.first == specificLDE );
215 bool otherSecond = ( lowElmOther.second == specificLDE );
217 bool thisFirst = ( lowElmThis.first == specificLDE );
218 bool thisSecond = ( lowElmThis.second == specificLDE );
220 bool isPartOfThisFace = ( thisFirst || thisSecond );
221 bool isPartOfOtherFace = ( otherFirst || otherSecond );
223 if( ! isPartOfOtherFace || ! isPartOfThisFace )
225 UG_LOG(
"not part of one of the faces " << std::endl);
229 if( otherFirst && thisFirst )
231 if( lowElmOther.first == lowElmThis.first )
234 else if( otherFirst && thisSecond )
236 if( lowElmOther.first == lowElmThis.second )
239 else if( otherSecond && thisFirst )
241 if( lowElmOther.second == lowElmThis.first )
244 else if( otherSecond && thisSecond )
246 if( lowElmOther.second == lowElmThis.second )
269 UG_LOG(
"gleiches face aber andere Ecken???" << std::endl);
270 UG_THROW(
"gleiches face aber andere Ecken???" << std::endl);
286 if( ( epOne.first == epTwo.first && epOne.second == epTwo.second )
287 || ( epOne.first == epTwo.second && epOne.second == epTwo.first )
314typename SENKRECHTENTYP,
317class VertexFractureTripleMF
318:
public AttachedGeneralElem<MANIFOLDTYP,LOWDIMTYP,INDEXTYP>
322 using AttGenEl = AttachedGeneralElem<MANIFOLDTYP,LOWDIMTYP,INDEXTYP>;
326 using PairLowEl = std::pair<LOWDIMTYP,LOWDIMTYP>;
328 VertexFractureTripleMF( MANIFOLDTYP
const & manifElm, INDEXTYP sudo,
329 FULLDIMTYP
const & fullElm,
330 SENKRECHTENTYP
const & normal,
331 PairLowEl
const & pairLowElm )
333 AttGenEl(manifElm,pairLowElm),
334 m_sudo(sudo), m_fullElm(fullElm),
335 m_normal(normal), m_newNormal(normal)
343 INDEXTYP
const getSudoElm()
const {
return m_sudo; }
345 FULLDIMTYP
const getFullElm()
const {
return m_fullElm; }
347 SENKRECHTENTYP
const getNormal()
const {
return m_normal; }
352 void setNewNormal( SENKRECHTENTYP
const & chNorml ) { m_newNormal = chNorml; }
354 SENKRECHTENTYP
const getNewNormal()
const {
return m_newNormal; }
362 FULLDIMTYP m_fullElm;
363 SENKRECHTENTYP m_normal;
364 SENKRECHTENTYP m_newNormal;
367 VertexFractureTripleMF()
378template <
typename VRT,
typename IndTyp >
466 NORMAL_VEC
const & normalVec )
485 bool geomEqu = AttGenElm::testIfEquals(attElm);
489 INDEX_TXP sudoOther = attElm.
getSudo();
499 if( geomEqu && sudoOther == this->
m_sudo )
642 NORMAL_VEC
const & normalVec )
762 bool alreadyInList =
false;
766 if( sudo == availSudo )
767 alreadyInList =
true;
770 if( ! alreadyInList )
959 UG_THROW(
"zu viele subdomains crossing in one Punkt" << std::endl);
984typename FULLDIM_ELEM,
1027 FULLDIM_ELEM otherFullDimElm = otherFullDimElmInf.getFulldimElem();
1060 template <
typename NOGEN>
1064 template <
typename NOGEN>
1142 if( found && eraseFound )
1154 bool manifNeighbored =
false;
1159 manifNeighbored =
true;
1163 if( manifNeighbored && eraseFoundManif )
1168 return manifNeighbored;
1172 template <
typename NOGEN>
1180 if( found && shiftToUnclosedFracts )
1201 template <
typename NOGEN>
1347 typename = std::enable_if<std::is_same<Volume*,FULLDIM_ELEM>::value>,
1348 typename = std::enable_if<std::is_same<Face*,MANIFELM>::value>
1356 for( INDEX_TXP iFac = 0; iFac <
m_fullDimElm->num_faces(); iFac++ )
1363 if( fac == manifEl )
1376 template <
typename ATT_MANIF_ELM_INF >
1378 std::vector<ATT_MANIF_ELM_INF> & memVecManifElem,
1379 bool eraseFound =
true )
1383 for(
typename std::vector<ATT_MANIF_ELM_INF>::iterator afeiIter = memVecManifElem.begin();
1384 afeiIter != memVecManifElem.end();
1388 ATT_MANIF_ELM_INF & manifElmTest = *afeiIter;
1390 if( manifElemOther.testIfEquals(manifElmTest) )
1394 memVecManifElem.erase(afeiIter);
1405 template <
typename ATT_MANIF_ELM_INFO >
1407 std::vector<ATT_MANIF_ELM_INFO> & memVecManifElm,
1419 for(
auto const & me : memVecManifElm )
1421 if( manifElm.testIfEquals(me) )
1428 memVecManifElm.push_back(manifElm);
1441template<
typename VECTOR_TYP,
1450 template<typename = std::enable_if<std::is_same<VECTOR_TYP,vector3>::value>>
1464 template<typename = std::enable_if<std::is_same<VECTOR_TYP,vector3>::value>>
1466 VECTOR_TYP
const & baseVect,
1469 number scaleShiftNormal = 0
1481 UG_LOG(
"Ebenenkoordinatenform ");
1483 for(
int i = 0; i <
m_dim; i++ )
1485 m_rhs += normalVect[i]*baseVect[i];
1487 UG_LOG(
" + " << normalVect[i] <<
" x_" << i <<
" " );
1514 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value
1520 VECTOR_TYP shiftedBaseVect;
1525 UG_LOG(
"Ebenenkoordinatenform Shifted Plane " << std::endl);
1540 template<typename = std::enable_if<std::is_same<VECTOR_TYP,vector3>::value >>
1544 UG_LOG(
"Ebenenkoordinatenform Shifted Plane " << std::endl);
1550 UG_LOG(
"Neuer Manifold Descripter verschoben ohne Ecken" << std::endl);
1558 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>>
1561 VECTOR_TYP shiftVec;
1565 VECTOR_TYP shiftedBaseVec;
1569 return shiftedBaseVec;
1618typename FULLDIM_ELEM,
1658 template< typename = std::enable_if< std::is_pointer<LOWDIMELM>::value>
1714 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>,
1715 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>
1738 return static_cast<VrtxFracStatus>(
static_cast<INDEX_TXP
>(vfsFract) +
static_cast<INDEX_TXP
>(vfsBndry) );
1749 template<
typename NOFRACT >
1766 template<
typename NOFRACT >
1814 template<
typename NOFRACT >
1822 template<
typename NOFRACT >
1836 template< typename = std::enable_if< std::is_pointer<LOWDIMELM>::value>
1844 UG_LOG(
"Shift direction already set different " << std::endl);
1845 UG_THROW(
"Shift direction already set different " << std::endl);
1848 if( shiftDirectionElm !=
nullptr )
1857 template< typename = std::enable_if< std::is_pointer<LOWDIMELM>::value>
1890 UG_LOG(
"please average " << std::endl);
1891 UG_THROW(
"please average " << std::endl);
1900 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>>
1903 bool clearDescVec =
true
1956 UG_LOG(
"please average " << std::endl);
1957 UG_THROW(
"please average " << std::endl);
1966 template<typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>>
1969 bool clearDescVec =
true
2009 template <
typename ATT_ELM,
typename VEC_ATT_ELM,
2010 typename = std::enable_if<std::is_same<std::vector<ATT_ELM>,VEC_ATT_ELM>::value>,
2011 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2013 bool isStillUnknown( ATT_ELM
const & afeNew, VEC_ATT_ELM
const & vecAttELm,
bool acceptUnknowns =
false )
2015 for( ATT_ELM
const & afeAlt : vecAttELm )
2017 if( afeAlt.testIfEquals(afeNew) )
2019 UG_LOG(
"Strange, already known?" << std::endl);
2020 if( ! acceptUnknowns )
2021 UG_THROW(
"Strange, already known?" << std::endl);
2030 template <
typename ATT_ELM,
2031 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2033 bool extractSudoList( std::vector<INDEX_TXP> & sudoListSegment, std::vector<ATT_ELM>
const & vecAttELm )
2037 INDEX_TXP sudoNeeded = me.getSudo();
2039 bool sudoIsKnown =
false;
2041 for( INDEX_TXP sudoInList : sudoListSegment )
2043 if( sudoInList == sudoNeeded )
2051 sudoListSegment.push_back(sudoNeeded);
2057 template <
typename ATT_ELM,
2058 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2064 std::vector<INDEX_TXP> sudoListSegment;
2068 for( INDEX_TXP sudo : sudoListSegment )
2070 VECTOR_TYP normlAvrg;
2075 std::pair<INDEX_TXP, VECTOR_TYP> sudoNorml( sudo, normlAvrg );
2077 vecPSudoNrml.push_back(sudoNorml);
2081 std::vector<LOWDIMELM> vecLowDimElmsSudo;
2088 vecPSudoVecLowDiElm.push_back( sudoLDE );
2095 template <
typename ATT_ELM,
2096 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2100 VECTOR_TYP normsSum(0,0,0);
2101 INDEX_TXP numContrNrmls = 0;
2103 for( ATT_ELM
const & ae : vecAttElm )
2105 INDEX_TXP sudoElm = ae.getSudo();
2107 if( specfcSudo == sudoElm )
2109 VECTOR_TYP normElm = ae.getNormalVec();
2111 VECTOR_TYP tmpSum = normsSum;
2113 VecAdd( normsSum, normElm, tmpSum );
2119 if( numContrNrmls == 0 )
2121 UG_LOG(
"Kein Beitrag in SUdo? " << std::endl);
2122 UG_THROW(
"Kein Beitrag in SUdo? " << std::endl);
2126 VecScale( normlAvrg, normsSum, 1. /
static_cast<number>(numContrNrmls) );
2132 template <
typename ATT_ELM,
2133 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2137 for( ATT_ELM
const & ae : vecAttElm )
2139 INDEX_TXP sudoElm = ae.getSudo();
2141 if( specfcSudo == sudoElm )
2143 std::pair<LOWDIMELM,LOWDIMELM> paLoDiEl = ae.getPairLowElm();
2145 addElem(vecLowDimElms, paLoDiEl.first);
2146 addElem(vecLowDimElms, paLoDiEl.second);
2168 UG_LOG(
"no boundary, no averaging");
2175 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2177 bool schluckVecAttElm( std::vector<ATT_ELM>
const & vecAttElNew, std::vector<ATT_ELM> & vecAttElmKnown,
bool acceptUnknowns =
false )
2179 bool allUnknown =
true;
2181 for( ATT_ELM
const & aeN : vecAttElNew )
2183 if( !
schluckAttElm( aeN, vecAttElmKnown, acceptUnknowns ) )
2186 UG_LOG(
"ist schon bekannt" << std::endl);
2187 if( ! acceptUnknowns)
2188 UG_THROW(
"ist schon bekannt" << std::endl);
2198 typename = std::enable_if<std::is_base_of<AttFractElm,ATT_ELM>::value>
2200 bool schluckAttElm( ATT_ELM
const & attElNew, std::vector<ATT_ELM> & vecAttElmKnown,
bool acceptUnknowns =
false )
2204 if( !
isStillUnknown( attElNew, vecAttElmKnown, acceptUnknowns ) )
2206 UG_LOG(
"ist schon bekannt" << std::endl);
2207 if( ! acceptUnknowns )
2208 UG_THROW(
"ist schon bekannt" << std::endl);
2212 vecAttElmKnown.push_back(attElNew);
2221 UG_LOG(
"gibts keine Bndry " << std::endl);
2222 UG_THROW(
"gibts keine Bndry " << std::endl);
2231 template<
typename ManifDescr::ManifoldType manifTyp,
2232 typename = std::enable_if< std::is_same<VECTOR_TYP,vector3>::value>
2238 bool clearDescVec =
true
2243 UG_LOG(
"please average " << std::endl);
2244 UG_THROW(
"please average " << std::endl);
2249 vecManifDesc.clear();
2253 VECTOR_TYP posVrt = aaPos[
m_vrt];
2255 int sudo = psn.first;
2256 VECTOR_TYP normlVec = psn.second;
2266 UG_LOG(
"ASSIGN MANIF TYP " << manifTyp << std::endl);
2267 ManifDescr manifDesc( normlVec, posVrt, sudo, manifTyp );
2273 UG_LOG(
"No low dim elems " << std::endl);
2274 UG_THROW(
"No low dim elems " << std::endl);
2278 vecManifDesc.push_back( manifDesc );
2286 INDEX_TXP foundSudo = 0;
2290 INDEX_TXP sudoFract = psvlde.first;
2292 if( sudoFract == sudo )
2296 std::vector<LOWDIMELM>
const & vecLoDiEl = psvlde.second;
2298 if( ! md.schluckLowDimElms( vecLoDiEl ) )
2300 UG_LOG(
"NO LOWDIM ELEMS" << std::endl);
2306 if( foundSudo != 1 )
2308 UG_LOG(
"NO SUDO FOUND LDE" << std::endl);
2311 return ( foundSudo == 1 );
2316 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>,
2317 typename = std::enable_if< std::is_same<FULLDIM_ELEM,Volume*>::value>
2323 for(
size_t i_edge = 0; i_edge < fe->num_edges(); ++i_edge)
2325 LOWDIMELM lowDimElm = grid.
get_edge( fe, i_edge );
2346template <
typename VEC_AVEI,
typename OPERATION,
typename INDX_TYP >
2347bool switchFulldimInfo( VEC_AVEI & vecAttVolElemInfoCop,
2348 VEC_AVEI
const & vecAttVolElemInfo,
2349 VEC_AVEI & segmentAVEI,
2351 INDX_TYP switchInd = 0
2354 auto & startVolInfoThisSegment = vecAttVolElemInfoCop[switchInd];
2356 auto const & startVol = startVolInfoThisSegment.opera();
2358 for(
auto & possibleOrigVolInfo : vecAttVolElemInfo )
2360 auto const & possVol = possibleOrigVolInfo.opera();
2362 if( possVol == startVol )
2364 segmentAVEI().push_back(possibleOrigVolInfo);
2369 if( segmentAVEI().size() != 1 )
2371 UG_LOG(
"No start volume reconstructible " << std::endl);
2372 UG_THROW(
"No start volume reconstructible " << std::endl);
2376 if( ! vecAttVolElemInfoCop.erase( vecAttVolElemInfoCop.begin() + switchInd ) )
2412 template< typename = std::enable_if< std::is_pointer<MANIFEL>::value>,
2413 typename = std::enable_if< std::is_pointer<VRTXTYP>::value>
2416 MANIFEL
const & endingFractManifCutting,
2417 std::vector<MANIFEL>
const & vecEndingFractManifNotCutting,
2418 LOWDIMEL
const & oldLowDimElCut,
2419 ManifelPair const & pairNeighbouredFractClosedManifEl,
2420 LOWDIMEL
const & shiftDirectionElm,
2421 std::vector<LOWDIMEL>
const & vecLowDimElmsOfNotCuttingManifs,
2422 INDEXTYP sudoFractEnding,
2423 INDEXTYP sudoFractNotEnding
2443 template< typename = std::enable_if< std::is_pointer<MANIFEL>::value>,
2444 typename = std::enable_if< std::is_pointer<VRTXTYP>::value>
2448 MANIFEL
const & endingFractManifCutting,
2449 LOWDIMEL
const & oldLowDimElCut,
2450 ManifelPair const & pairNeighbouredFractClosedManifEl,
2451 LOWDIMEL
const & shiftDirectionElm,
2452 int sudoFractEnding,
2453 int sudoFractNotEnding
2473 template< typename = std::enable_if< std::is_pointer<MANIFEL>::value>,
2474 typename = std::enable_if< std::is_pointer<LOWDIMEL>::value>,
2475 typename = std::enable_if< std::is_pointer<VRTXTYP>::value>,
2476 typename = std::enable_if< std::is_integral<INDEXTYP>::value>
2505 UG_LOG(
"Shift Vertex already set different " << std::endl);
2506 UG_THROW(
"Shift Vertex already set different " << std::endl);
2510 if( shiftVrtx !=
nullptr )
2646 template< typename = std::enable_if< std::is_pointer<LOWDIMEL>::value>
2701 template <
typename ELEMTYP>
2702 bool schluckElem( ELEMTYP
const & anotherEl, std::vector<ELEMTYP> & vecElmKnown )
2704 bool elemNotKnown =
true;
2706 for( ELEMTYP me : vecElmKnown )
2708 if( me == anotherEl )
2710 elemNotKnown =
false;
2716 vecElmKnown.push_back(anotherEl);
2718 return elemNotKnown;
2721 template <
typename ELEMTYP>
2722 bool schluckVecElem( std::vector<ELEMTYP>
const & anotherVecEl, std::vector<ELEMTYP> & vecElmKnown )
2724 bool someElemsUnknown =
false;
2726 for( ELEMTYP me : anotherVecEl )
2730 someElemsUnknown =
true;
2734 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:629
std::pair< LOWDIMELM, LOWDIMELM > PairLowEl
Definition support3D.h:631
AttachedFractElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttFractElm
Definition support3D.h:635
AttachedBoundryElem(MANIFELM const &manifElm, PairLowEl &lowElm, INDEX_TXP sudo, NORMAL_VEC const &normalVec)
Definition support3D.h:639
AttachedBoundryElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttBndryElm
Definition support3D.h:633
Definition support3D.h:454
INDEX_TXP m_sudo
Definition support3D.h:612
INDEX_TXP const getSudo() const
Definition support3D.h:478
NORMAL_VEC m_normalVec
Definition support3D.h:613
AttachedFractElem(MANIFELM const &manifElm, PairLowEl &lowElm, INDEX_TXP sudo, NORMAL_VEC const &normalVec)
Definition support3D.h:463
AttachedGeneralElem< MANIFELM, LOWDIMELM, INDEX_TXP > AttGenElm
Definition support3D.h:460
std::pair< LOWDIMELM, LOWDIMELM > PairLowEl
Definition support3D.h:456
bool const testIfEquals(AttFractElm const &attElm) const
Definition support3D.h:482
NORMAL_VEC const getNormalVec() const
Definition support3D.h:480
Definition support3D.h:991
bool fullDimElmContainsManif(MANIFELM const &manifEl, Grid &grid)
Definition support3D.h:1352
bool addFractManifElem(AttachedFractManifElemInfo const &manifFractElm, Grid &grid)
Definition support3D.h:1040
VecAttachedBndryManifElemInfo const getVecBndryManifElem() const
Definition support3D.h:1132
bool const searchManifElem(ATT_MANIF_ELM_INF const &manifElemOther, std::vector< ATT_MANIF_ELM_INF > &memVecManifElem, bool eraseFound=true) const
Definition support3D.h:1377
bool addManifElem(ATT_MANIF_ELM_INFO const &manifElm, std::vector< ATT_MANIF_ELM_INFO > &memVecManifElm, Grid &grid)
Definition support3D.h:1406
bool const searchGenerManifElem(AttachedGenerManifElemInfo const &manifGenerElemOther, bool eraseFound=true)
Definition support3D.h:1138
VecAttachedFractManifElemInfo const getVecFractManifElem() const
Definition support3D.h:1116
void markIt()
Definition support3D.h:1034
VecAttachedBndryManifElemInfo m_vecBndryManifElm
Definition support3D.h:1328
bool addBndryManifElem(NOGEN const &noGener, Grid &grid)=delete
bool const hasUnclosedFracture() const
Definition support3D.h:1038
FULLDIM_ELEM const getFulldimElem() const
Definition support3D.h:1019
AttachedFractElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttachedFractManifElemInfo
Definition support3D.h:995
bool addGenerManifElem(NOGEN const &noGener, Grid &grid)=delete
VecAttachedFractManifElemInfo m_vecFractManifElm
Definition support3D.h:1316
FULLDIM_ELEM m_fullDimElm
Definition support3D.h:1312
VecAttachedFractManifElemInfo m_vecUnclosedFractManifElm
Definition support3D.h:1318
std::vector< AttachedFractManifElemInfo > VecAttachedFractManifElemInfo
Definition support3D.h:999
bool const hasFracture() const
Definition support3D.h:1036
bool const searchBndryManifElem(AttachedBndryManifElemInfo const &manifBndryElemOther)
Definition support3D.h:1204
bool const hasSameFulldimElem(AttFullDimElmInfo const &otherFullDimElmInf) const
Definition support3D.h:1024
bool m_elementMarked
Definition support3D.h:1314
AttachedFullDimElemInfo(FULLDIM_ELEM const &fullDimElm)
Definition support3D.h:1005
AttachedBoundryElem< MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttachedBndryManifElemInfo
Definition support3D.h:997
AttachedFullDimElemInfo< FULLDIM_ELEM, MANIFELM, LOWDIMELM, INDEX_TXP, NORMAL_VEC > AttFullDimElmInfo
Definition support3D.h:1003
bool const searchFractManifElem(AttachedFractManifElemInfo const &manifFractElemOther, bool shiftToUnclosedFracts=true)
Definition support3D.h:1176
VecAttachedGenerManifElemInfo const getVecGenerManifElem() const
Definition support3D.h:1127
VecAttachedGenerManifElemInfo m_vecGenerManifElm
Definition support3D.h:1326
std::vector< AttachedGenerManifElemInfo > VecAttachedGenerManifElemInfo
Definition support3D.h:1000
bool searchGenerManifElem(NOGEN const &manifGenerElemOther, bool eraseFound)=delete
bool const isMarked() const
Definition support3D.h:1032
AttachedGeneralElem< MANIFELM, LOWDIMELM, INDEX_TXP > AttachedGenerManifElemInfo
Definition support3D.h:996
std::vector< AttachedBndryManifElemInfo > VecAttachedBndryManifElemInfo
Definition support3D.h:1001
bool const searchFractManifElem(NOGEN const &manifFractElemOther, bool shiftToGeneral)=delete
bool addBndryManifElem(AttachedBndryManifElemInfo const &manifBndryElm, Grid &grid)
Definition support3D.h:1052
VecAttachedFractManifElemInfo const getVecUnclosedFractManifElem() const
Definition support3D.h:1121
bool addGenerManifElem(AttachedGenerManifElemInfo const &manifGenerElm, Grid &grid)
Definition support3D.h:1045
bool const testFullDimElmNeighbour(AttFullDimElmInfo const &attFullDimElmInfOther, bool eraseFoundManif=true)
Definition support3D.h:1150
Definition support3D.h:151
AttachedGeneralElem(MANIFELM const &manifElm, PairLowEl const &lowElm)
Definition support3D.h:158
MANIFELM m_manifElm
Definition support3D.h:279
bool const hasSameEdgePair(PairLowEl const &epTwo) const
Definition support3D.h:282
MANIFELM const getManifElm() const
Definition support3D.h:166
PairLowEl m_pairLowElm
Definition support3D.h:280
std::pair< LOWDIMELM, LOWDIMELM > PairLowEl
Definition support3D.h:153
bool const isNeighbouredAtSpecificSide(AttGenElm const &attElm, LOWDIMELM const &specificLDE) const
Definition support3D.h:203
PairLowEl const getPairLowElm() const
Definition support3D.h:168
bool const isNeighboured(AttGenElm const &attElm) const
Definition support3D.h:170
bool const testIfEquals(AttGenElm const &attElm) const
Definition support3D.h:253
Definition support3D.h:380
void setShiftVrtx(std::vector< VRT > const &vecVrt)
Definition support3D.h:414
std::vector< std::pair< VRT, bool > > m_vecShiftedVrtsWithTypInf
Definition support3D.h:434
std::vector< VRT > m_vecShiftedVrts
Definition support3D.h:433
void addShiftVrtx(VRT const &vrt, bool isAtFreeSide=false)
Definition support3D.h:396
FracTypVol getFracTyp() const
Definition support3D.h:394
IndTyp m_numberAtFreeSide
Definition support3D.h:436
VRT getCrossVertex() const
Definition support3D.h:392
VRT m_crossVrt
Definition support3D.h:432
FracTypVol m_fracTyp
Definition support3D.h:435
CrossingVertexInfoVol(VRT const &crossVrt, FracTypVol fracTyp)
Definition support3D.h:384
std::vector< VRT > getVecShiftedVrts() const
Definition support3D.h:416
std::vector< std::pair< VRT, bool > > getVecShiftedVrtsWithTypInfo() const
Definition support3D.h:421
Definition support3D.h:2396
INDEXTYP m_sudoFractNotEnding
Definition support3D.h:2693
VRTXTYP m_unclosedVrtx
Definition support3D.h:2675
std::vector< LOWDIMEL > const spuckVecLowDimElmsOfNotCuttingManifs()
Definition support3D.h:2625
std::vector< MANIFEL > const spuckVecClosedFracManifElNoNeighbr() const
Definition support3D.h:2605
ManifelPair const spuckPairNeighbouredFractClosedManifEl() const
Definition support3D.h:2630
LOWDIMEL m_shiftDirectionElm
Definition support3D.h:2690
INDEXTYP const spuckSudoFractNotEnding() const
Definition support3D.h:2636
std::vector< MANIFEL > m_vecEndingFractManifNotCutting
Definition support3D.h:2678
bool schluckVecClosedFracManifElNoNeighbr(std::vector< MANIFEL > const &vecClosFracME)
Definition support3D.h:2546
LOWDIMEL const spuckLowdimElmShiftDirection() const
Definition support3D.h:2648
bool schluckFulldimElm(FULLDIMEL const &fuDiEl)
Definition support3D.h:2551
MANIFEL const spuckHiddenCutFractManifEl() const
Definition support3D.h:2664
std::vector< FULLDIMEL > m_vecFulldimEl
Definition support3D.h:2695
VRTXTYP const spuckShiftVrtx() const
Definition support3D.h:2524
VRTXTYP const spuckUnclosedVrtx() const
Definition support3D.h:2600
bool schluckVecFulldimElm(std::vector< FULLDIMEL > const &vecFuDiEl)
Definition support3D.h:2556
MANIFEL const spuckEndingFractManifCutting() const
Definition support3D.h:2610
bool isEndingCleft()
Definition support3D.h:2536
bool m_isEndingCleft
Definition support3D.h:2671
bool schluckClosedFracManifElNoNeighbr(MANIFEL const &closFracME)
Definition support3D.h:2540
bool schluckShiftVrtx(VRTXTYP const &shiftVrtx)
Definition support3D.h:2498
EndingCrossingFractSegmentInfo(VRTXTYP const &vrt, MANIFEL const &endingFractManifCutting, LOWDIMEL const &oldLowDimElCut, ManifelPair const &pairNeighbouredFractClosedManifEl, LOWDIMEL const &shiftDirectionElm, int sudoFractEnding, int sudoFractNotEnding)
Definition support3D.h:2447
bool schluckElem(ELEMTYP const &anotherEl, std::vector< ELEMTYP > &vecElmKnown)
Definition support3D.h:2702
EndingCrossingFractSegmentInfo()
Definition support3D.h:2479
LOWDIMEL m_oldLowDimElCut
Definition support3D.h:2685
std::vector< FULLDIMEL > const spuckVecFulldimEl() const
Definition support3D.h:2638
bool schluckHiddenCutFractManifEl(MANIFEL const &manifel)
Definition support3D.h:2653
INDEXTYP const spuckSudoFractEnding() const
Definition support3D.h:2635
std::vector< LOWDIMEL > m_vecLowDimElmsOfNotCuttingManifs
Definition support3D.h:2688
ManifelPair m_pairNeighbouredFractClosedManifEl
Definition support3D.h:2680
MANIFEL m_endingFractManifCutting
Definition support3D.h:2676
INDEXTYP m_sudoFractEnding
Definition support3D.h:2692
VRTXTYP m_shiftVrtx
Definition support3D.h:2697
std::vector< MANIFEL > const spuckVecEndingFractManifNotCutting() const
Definition support3D.h:2615
std::pair< MANIFEL, MANIFEL > ManifelPair
Definition support3D.h:2410
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:2415
LOWDIMEL const spuckOldLowDimElCut() const
Definition support3D.h:2620
bool schluckVecElem(std::vector< ELEMTYP > const &anotherVecEl, std::vector< ELEMTYP > &vecElmKnown)
Definition support3D.h:2722
MANIFEL m_hiddenCutManifEl
Definition support3D.h:2699
std::vector< MANIFEL > m_vecClosedFracManifElNoNeighbr
Definition support3D.h:2683
Definition support3D.h:1445
bool spuckPlaneShifted(ManifoldDescriptor &manifoldDescr)
Definition support3D.h:1541
int const spuckSudo() const
Definition support3D.h:1497
number const & spuckRHS() const
Definition support3D.h:1512
int m_dim
Definition support3D.h:1593
number m_rhs
Definition support3D.h:1588
int m_sudo
Definition support3D.h:1594
std::vector< LOWDIMELM > m_lowDimElms
Definition support3D.h:1597
void schluckManifTyp(ManifoldType manifTyp)
Definition support3D.h:1505
VECTOR_TYP m_baseVect
Definition support3D.h:1587
ManifoldType const spuckManifTyp() const
Definition support3D.h:1499
ManifoldType m_manifTyp
Definition support3D.h:1595
void schluckSudo(int sudo)
Definition support3D.h:1503
ManifoldDescriptor(VECTOR_TYP const &normalVect, VECTOR_TYP const &baseVect, int sudo=-1, ManifoldType manifTyp=isArtificial, number scaleShiftNormal=0)
Definition support3D.h:1465
void schluckScaleShiftNormal(number scaleShiftNormal)
Definition support3D.h:1507
number const spuckScaleShiftNormal() const
Definition support3D.h:1501
VECTOR_TYP spuckShiftedBaseVect()
Definition support3D.h:1559
bool schluckLowDimElms(std::vector< LOWDIMELM > const &lowDimElms)
Definition support3D.h:1572
ManifoldType
Definition support3D.h:1448
@ isBoundary
Definition support3D.h:1448
@ isArtificial
Definition support3D.h:1448
@ isFracture
Definition support3D.h:1448
bool spuckPlaneShiftedAlong(VECTOR_TYP const &shiftVec, ManifoldDescriptor &manifoldDescr)
Definition support3D.h:1518
bool const spuckLowDimElms(std::vector< LOWDIMELM > &lowDimElms) const
Definition support3D.h:1578
ManifoldDescriptor()
Definition support3D.h:1452
VECTOR_TYP const & spuckBaseVector() const
Definition support3D.h:1495
VECTOR_TYP const & spuckNormalVector() const
Definition support3D.h:1494
number m_scaleShiftNormal
Definition support3D.h:1589
VECTOR_TYP m_normalVect
Definition support3D.h:1586
Definition support3D.h:1626
std::vector< PairSudoNormlV > VecPairSudoNormlV
Definition support3D.h:1641
bool m_averaged
Definition support3D.h:1998
bool m_isBoundary
Definition support3D.h:1997
bool averageBndryNormals()
Definition support3D.h:2160
bool const spuckFractSudoNormls(VecPairSudoNormlV &vecFractSudosNormlV) const
Definition support3D.h:1886
ManifoldDescriptor< VECTOR_TYP, LOWDIMELM > ManifDescr
Definition support3D.h:1646
bool schluckVecAttBndryElm(std::vector< AttBndryElm > const &vecAtBndryEl)
Definition support3D.h:1777
VRTXTYP const spuckVertex() const
Definition support3D.h:1693
bool schluckVecAttFractElm(std::vector< NOFRACT > const &vecAtFracEl)=delete
bool schluckAttBndryElm(AttBndryElm const &afeNew)
Definition support3D.h:1785
VecAttFractElm m_vecAttFractElms
Definition support3D.h:1983
bool spuckListLowdimElmsOfVols(std::vector< LOWDIMELM > &listLowdimElms, Grid &grid)
Definition support3D.h:1717
bool schluckLowdimElmShiftDirectionIfUnclosedFractPresent(LOWDIMELM const &shiftDirectionElm)
Definition support3D.h:1838
bool const spuckVecAttUnclosedFractElm(std::vector< AttFractElm > &vecAttFracEl) const
Definition support3D.h:1825
std::vector< ManifDescr > VecManifDescr
Definition support3D.h:1647
bool extractLowDimElemsForSpecificSudo(INDEX_TXP specfcSudo, std::vector< ATT_ELM > const &vecAttElm, std::vector< LOWDIMELM > &vecLowDimElms)
Definition support3D.h:2135
bool schluckAttUnclosedFractElm(AttFractElm const &afeNew)
Definition support3D.h:1817
bool schluckAttUnclosedFractElm(NOFRACT const &afeNew)=delete
VecAttFractElm m_vecAttUnclosedFractElms
Definition support3D.h:1984
bool schluckVecAttFractElm(std::vector< AttFractElm > const &vecAtFracEl)
Definition support3D.h:1744
std::vector< AttBndryElm > VecAttBndryElm
Definition support3D.h:1638
bool schluckFulldimElem(FULLDIM_ELEM const &fudielm)
Definition support3D.h:1698
std::vector< LOWDIMELM > m_vecVolEdges
Definition support3D.h:2003
bool schluckAttFractElm(AttFractElm const &afeNew)
Definition support3D.h:1752
bool schluckVecAttUnclosedFractElm(std::vector< AttFractElm > const &vecAtFracEl)
Definition support3D.h:1809
bool const addLowDimElmListForSudo(ManifDescr &md, INDEX_TXP sudo, VecPairSudoVecLowDiEl const &vecFractSudosLDE) const
Definition support3D.h:2284
VrtxFracStatus const spuckCrossingTyp() const
Definition support3D.h:1730
bool const spuckVecFulldimElem(std::vector< FULLDIM_ELEM > &fudielm) const
Definition support3D.h:1705
LOWDIMELM m_shiftDirectionIfUnclosedFractPresent
Definition support3D.h:1981
void determineListLowdimElms(Grid &grid)
Definition support3D.h:2319
bool spuckBndrySudoNormls(VecPairSudoNormlV &vecBndrySudosNormlV)
Definition support3D.h:1949
bool averageNormalForSpecificSudo(INDEX_TXP specfcSudo, std::vector< ATT_ELM > const &vecAttElm, VECTOR_TYP &normlAvrg)
Definition support3D.h:2098
bool spuckVecAttBndryElm(std::vector< AttBndryElm > &vecAtBndryEl)
Definition support3D.h:1802
bool const spuckFractManifDescr(VecManifDescr &vecManifDesc, Grid::VertexAttachmentAccessor< APosition > const &aaPos, bool clearDescVec=true) const
Definition support3D.h:1901
VRTXTYP m_vrt
Definition support3D.h:1979
std::vector< PairSudoVecLowDiEl > VecPairSudoVecLowDiEl
Definition support3D.h:1644
bool m_volEdgesDetermined
Definition support3D.h:2002
bool schluckAttFractElm(NOFRACT const &afeNew)=delete
VecPairSudoNormlV m_vecBndrySudosNormlV
Definition support3D.h:1991
bool schluckAttElm(ATT_ELM const &attElNew, std::vector< ATT_ELM > &vecAttElmKnown, bool acceptUnknowns=false)
Definition support3D.h:2200
std::vector< FULLDIM_ELEM > m_contribFulldimElm
Definition support3D.h:2000
bool extractSudoList(std::vector< INDEX_TXP > &sudoListSegment, std::vector< ATT_ELM > const &vecAttELm)
Definition support3D.h:2033
bool averageNormlForEachSudo(std::vector< ATT_ELM > const &vecAttElm, VecPairSudoNormlV &vecPSudoNrml, VecPairSudoVecLowDiEl &vecPSudoVecLowDiElm)
Definition support3D.h:2060
bool schluckVecAttUnclosedFractElm(std::vector< NOFRACT > const &vecAtFracEl)=delete
bool isStillUnknown(ATT_ELM const &afeNew, VEC_ATT_ELM const &vecAttELm, bool acceptUnknowns=false)
Definition support3D.h:2013
bool averageAll()
Definition support3D.h:1870
bool const spuckVecAttFractElm(std::vector< AttFractElm > &vecAttFracEl) const
Definition support3D.h:1771
bool schluckVecAttElm(std::vector< ATT_ELM > const &vecAttElNew, std::vector< ATT_ELM > &vecAttElmKnown, bool acceptUnknowns=false)
Definition support3D.h:2177
bool checkIfIsAtBndry()
Definition support3D.h:2217
VecPairSudoVecLowDiEl m_vecFractSudoLowDiEl
Definition support3D.h:1993
bool const spuckLowdimElmShiftDirectionIfUnclosedFractPresent(LOWDIMELM &shiftDirectionElm) const
Definition support3D.h:1859
VecPairSudoVecLowDiEl m_vecBndrySudoLowDiEl
Definition support3D.h:1994
bool const spuckBndryManifDescr(VecManifDescr &vecManifDesc, Grid::VertexAttachmentAccessor< APosition > const &aaPos, bool clearDescVec=true) const
Definition support3D.h:1967
VecAttBndryElm m_vecAttBndryElms
Definition support3D.h:1986
std::pair< INDEX_TXP, VECTOR_TYP > PairSudoNormlV
Definition support3D.h:1640
SegmentSides(VRTXTYP const &vrt, bool isBndry=false)
Definition support3D.h:1660
bool const hasUnclosedFaces() const
Definition support3D.h:1831
std::pair< INDEX_TXP, std::vector< LOWDIMELM > > PairSudoVecLowDiEl
Definition support3D.h:1643
bool averageFractNormals()
Definition support3D.h:2155
bool const isBoundary() const
Definition support3D.h:1691
VecPairSudoNormlV m_vecFractSudosNormlV
Definition support3D.h:1990
bool const spuckManifDescr(VecManifDescr &vecManifDesc, Grid::VertexAttachmentAccessor< APosition > const &aaPos, VecPairSudoNormlV const &vecFractSudosNormlV, VecPairSudoVecLowDiEl const &vecFractSudosLDE, bool clearDescVec=true) const
Definition support3D.h:2234
std::vector< AttFractElm > VecAttFractElm
Definition support3D.h:1637
VrtxFracStatus
Definition support3D.h:1629
@ threeFracSuDoAtt
Definition support3D.h:1632
@ oneFracSuDoAtt
Definition support3D.h:1630
@ noFracSuDoAtt
Definition support3D.h:1629
@ twoFracSuDoAtt
Definition support3D.h:1631
AttachedBoundryElem< MANIFELM, LOWDIMELM, INDEX_TXP, VECTOR_TYP > AttBndryElm
Definition support3D.h:1635
Definition support3D.h:667
std::pair< T, bool > pairTB
Definition support3D.h:670
VrtxFracStatus getVrtxFracStatus()
Definition support3D.h:753
VrtxFracStatus m_status
Definition support3D.h:937
bool m_isBndFracVertex
Definition support3D.h:934
VertexFracturePropertiesVol & operator++(int a)
Definition support3D.h:746
std::vector< T > const getSudoList() const
Definition support3D.h:779
bool setSudoList(std::vector< T > const &sudoList)
Definition support3D.h:970
bool adaptVrtxFracStatus()
Definition support3D.h:954
void setNumberCrossingFracsInVertex(T const &nCFIV)
Definition support3D.h:700
bool getIsBndFracVertex()
Definition support3D.h:705
void setIsBndFracVertex(bool iBDV=true)
Definition support3D.h:695
bool setVrtxFracStatus(VrtxFracStatus status)
Definition support3D.h:944
std::vector< T > m_sudoList
Definition support3D.h:941
VertexFracturePropertiesVol()
Definition support3D.h:685
static VrtxFracStatus constexpr m_maxStatus
Definition support3D.h:939
VrtxFracStatus
Definition support3D.h:680
@ threeFracSuDoAtt
Definition support3D.h:683
@ oneFracSuDoAtt
Definition support3D.h:681
@ twoFracSuDoAtt
Definition support3D.h:682
@ noFracSuDoAtt
Definition support3D.h:680
std::vector< pairTB > VecPairTB
Definition support3D.h:671
T getNumberFracEdgesInVertex()
Definition support3D.h:716
T m_numberCountedFracsInVertex
Definition support3D.h:935
bool addFractSudo(T const &sudo)
Definition support3D.h:760
#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
FracTypVol
Definition support3D.h:376
@ XCross
Definition support3D.h:376
@ TEnd
Definition support3D.h:376
@ SingleFrac
Definition support3D.h:376
bool addElem(std::vector< ELEMTYP > &knownElems, ELEMTYP elemToAdd)
Definition support3D.h:40