Commit aa464182 authored by Kirill Terekhov's avatar Kirill Terekhov
Browse files

remove cell<->node connections

parent 9325de74
...@@ -305,7 +305,7 @@ int main(int argc,char ** argv) ...@@ -305,7 +305,7 @@ int main(int argc,char ** argv)
for(Mesh::iteratorFace face = m->BeginFace(); face != m->EndFace(); ++face) for(Mesh::iteratorFace face = m->BeginFace(); face != m->EndFace(); ++face)
{ {
//~ std::cout << face->LocalID() << " / " << m->NumberOfFaces() << std::endl; //~ std::cout << face->LocalID() << " / " << m->NumberOfFaces() << std::endl;
Element::Status s1,s2; Element::Status s1 = Element::Any,s2 = Element::Any;
Cell r1 = face->BackCell(); Cell r1 = face->BackCell();
Cell r2 = face->FrontCell(); Cell r2 = face->FrontCell();
if( ((!r1.isValid() || (s1 = r1->GetStatus()) == Element::Ghost)?0:1)+ if( ((!r1.isValid() || (s1 = r1->GetStatus()) == Element::Ghost)?0:1)+
......
...@@ -1488,11 +1488,11 @@ namespace INMOST ...@@ -1488,11 +1488,11 @@ namespace INMOST
std::pair<Edge,bool> CreateEdge (const ElementArray<Node> & nodes); std::pair<Edge,bool> CreateEdge (const ElementArray<Node> & nodes);
std::pair<Face,bool> CreateFace (const ElementArray<Edge> & edges); std::pair<Face,bool> CreateFace (const ElementArray<Edge> & edges);
std::pair<Face,bool> CreateFace (const ElementArray<Node> & nodes); std::pair<Face,bool> CreateFace (const ElementArray<Node> & nodes);
std::pair<Cell,bool> CreateCell (const ElementArray<Face> & faces, const ElementArray<Node> & suggest_nodes_order = ElementArray<Node>(NULL)); std::pair<Cell,bool> CreateCell (const ElementArray<Face> & faces);//, const ElementArray<Node> & suggest_nodes_order = ElementArray<Node>(NULL));
std::pair<Cell,bool> CreateCell (const ElementArray<Node> & c_f_nodes, const integer * c_f_numnodes, integer num_c_faces, std::pair<Cell,bool> CreateCell (const ElementArray<Node> & c_f_nodes, const integer * c_f_numnodes, integer num_c_faces);//,
const ElementArray<Node> & suggest_nodes_order = ElementArray<Node>(NULL)); //const ElementArray<Node> & suggest_nodes_order = ElementArray<Node>(NULL));
std::pair<Cell,bool> CreateCell (const ElementArray<Node> & c_nodes, const integer * c_f_nodeinds, const integer * c_f_numnodes, integer num_c_faces, std::pair<Cell,bool> CreateCell (const ElementArray<Node> & c_nodes, const integer * c_f_nodeinds, const integer * c_f_numnodes, integer num_c_faces);//,
const ElementArray<Node> & suggest_nodes_order = ElementArray<Node>(NULL)); //const ElementArray<Node> & suggest_nodes_order = ElementArray<Node>(NULL));
std::pair<ElementSet,bool> CreateSet (std::string name); std::pair<ElementSet,bool> CreateSet (std::string name);
/// Same as Mesh::CreateSet without checking existance of the set /// Same as Mesh::CreateSet without checking existance of the set
std::pair<ElementSet,bool> CreateSetUnique (std::string name); std::pair<ElementSet,bool> CreateSetUnique (std::string name);
......
...@@ -234,14 +234,8 @@ namespace INMOST ...@@ -234,14 +234,8 @@ namespace INMOST
lid = IntegerDF(lc[kt],set_id); lid = IntegerDF(lc[kt],set_id);
uconv.write_iValue(out,lid); uconv.write_iValue(out,lid);
} }
Element::adj_type & hc = HighConn(*it); nhigh = 0;
nhigh = static_cast<INMOST_DATA_ENUM_TYPE>(hc.size());
uconv.write_iValue(out,nhigh); uconv.write_iValue(out,nhigh);
for(Element::adj_type::size_type kt = 0; kt < hc.size(); ++kt)
{
lid = IntegerDF(hc[kt],set_id);
uconv.write_iValue(out,lid);
}
} }
// Element Sets // Element Sets
...@@ -1259,7 +1253,8 @@ namespace INMOST ...@@ -1259,7 +1253,8 @@ namespace INMOST
uconv.read_iValue(in,lid); uconv.read_iValue(in,lid);
suggest_nodes.push_back(new_nodes[lid]); suggest_nodes.push_back(new_nodes[lid]);
} }
new_cells[i] = CreateCell(sub_elements, suggest_nodes).first->GetHandle(); //new_cells[i] = CreateCell(sub_elements, suggest_nodes).first->GetHandle();
new_cells[i] = CreateCell(sub_elements).first->GetHandle();
sub_elements.clear(); sub_elements.clear();
suggest_nodes.clear(); suggest_nodes.clear();
} }
......
...@@ -1882,7 +1882,8 @@ safe_output: ...@@ -1882,7 +1882,8 @@ safe_output:
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces,c_nodes).first; //Cell c = CreateCell(c_faces,c_nodes).first;
Cell c = CreateCell(c_faces).first;
newcells[i] = c->GetHandle(); newcells[i] = c->GetHandle();
} }
else else
...@@ -1921,7 +1922,8 @@ safe_output: ...@@ -1921,7 +1922,8 @@ safe_output:
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces,c_nodes).first; //Cell c = CreateCell(c_faces,c_nodes).first;
Cell c = CreateCell(c_faces).first;
newcells[i] = c->GetHandle(); newcells[i] = c->GetHandle();
} }
else newcells[i] = CreateFace(c_nodes).first->GetHandle(); else newcells[i] = CreateFace(c_nodes).first->GetHandle();
...@@ -1948,7 +1950,8 @@ safe_output: ...@@ -1948,7 +1950,8 @@ safe_output:
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces,c_nodes).first; //Cell c = CreateCell(c_faces,c_nodes).first;
Cell c = CreateCell(c_faces).first;
newcells[i] = c->GetHandle(); newcells[i] = c->GetHandle();
} }
else newcells[i] = CreateFace(c_nodes).first->GetHandle(); else newcells[i] = CreateFace(c_nodes).first->GetHandle();
......
...@@ -674,7 +674,8 @@ namespace INMOST ...@@ -674,7 +674,8 @@ namespace INMOST
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces,hnodes).first; //Cell c = CreateCell(c_faces,hnodes).first;
Cell c = CreateCell(c_faces).first;
newcells[q] = c->GetHandle(); newcells[q] = c->GetHandle();
} }
else else
...@@ -703,7 +704,8 @@ namespace INMOST ...@@ -703,7 +704,8 @@ namespace INMOST
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces, hnodes).first; //Cell c = CreateCell(c_faces, hnodes).first;
Cell c = CreateCell(c_faces).first;
newcells[q] = c->GetHandle(); newcells[q] = c->GetHandle();
} }
else else
...@@ -733,7 +735,8 @@ namespace INMOST ...@@ -733,7 +735,8 @@ namespace INMOST
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces, hnodes).first; //Cell c = CreateCell(c_faces, hnodes).first;
Cell c = CreateCell(c_faces).first;
newcells[q] = c->GetHandle(); newcells[q] = c->GetHandle();
} }
else else
...@@ -757,7 +760,8 @@ namespace INMOST ...@@ -757,7 +760,8 @@ namespace INMOST
f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle(); f_edges.at(1) = CreateEdge(e_nodes).first->GetHandle();
c_faces.push_back(CreateFace(f_edges).first); c_faces.push_back(CreateFace(f_edges).first);
} }
Cell c = CreateCell(c_faces, hnodes).first; //Cell c = CreateCell(c_faces, hnodes).first;
Cell c = CreateCell(c_faces).first;
newcells[q] = c->GetHandle(); newcells[q] = c->GetHandle();
} }
else else
......
...@@ -141,7 +141,6 @@ namespace INMOST ...@@ -141,7 +141,6 @@ namespace INMOST
if( jt == jend ) return false; //no matching edge if( jt == jend ) return false; //no matching edge
} }
adj_type::size_type it = 1, iend = lc.size()-1; adj_type::size_type it = 1, iend = lc.size()-1;
bool corrected = false;
while(it < iend) //loop over edges while(it < iend) //loop over edges
{ {
adj_type const & ilc = m->LowConn(lc[it]); adj_type const & ilc = m->LowConn(lc[it]);
...@@ -168,20 +167,12 @@ namespace INMOST ...@@ -168,20 +167,12 @@ namespace INMOST
HandleType temp = lc[it]; HandleType temp = lc[it];
lc[it] = lc[jt]; lc[it] = lc[jt];
lc[jt] = temp; lc[jt] = temp;
corrected = true;
break; break;
} }
} }
if( jt == jend ) return false; //no matching edge if( jt == jend ) return false; //no matching edge
} }
} }
if( corrected )
{
ElementArray<Node> nodes(GetMeshLink());
GetMeshLink()->RestoreCellNodes(GetHandle(),nodes);
Element::adj_type & hc = GetMeshLink()->HighConn(GetHandle());
hc.replace(hc.begin(),hc.end(),nodes.begin(),nodes.end());
}
//check that the loop is closed //check that the loop is closed
adj_type const & ilc = m->LowConn(lc[iend]); adj_type const & ilc = m->LowConn(lc[iend]);
if( ilc.size() != 2 ) return false; if( ilc.size() != 2 ) return false;
...@@ -305,20 +296,9 @@ namespace INMOST ...@@ -305,20 +296,9 @@ namespace INMOST
{ {
assert(GetHandleElementType(GetHandle())==CELL); assert(GetHandleElementType(GetHandle())==CELL);
Mesh * m = GetMeshLink(); Mesh * m = GetMeshLink();
if( !m->HideMarker() ) ElementArray<Node> ret(m);
{ m->RestoreCellNodes(GetHandle(),ret);
adj_type const & hc = m->HighConn(GetHandle()); return ret;
return ElementArray<Node>(m,hc.data(),hc.data()+hc.size());
}
else
{
MarkerType hm = m->HideMarker();
ElementArray<Node> aret(m);
adj_type const & hc = m->HighConn(GetHandle());
for(adj_type::size_type it = 0; it < hc.size(); ++it)
if( !m->GetMarker(hc[it],hm) ) aret.push_back(hc[it]);
return aret;
}
} }
...@@ -326,39 +306,19 @@ namespace INMOST ...@@ -326,39 +306,19 @@ namespace INMOST
{ {
assert(GetHandleElementType(GetHandle())==CELL); assert(GetHandleElementType(GetHandle())==CELL);
Mesh * m = GetMeshLink(); Mesh * m = GetMeshLink();
ElementArray<Node> aret(m); ElementArray<Node> aret(m), ret(m);
if( !m->HideMarker() ) m->RestoreCellNodes(GetHandle(),ret);
if( isPrivate(mask) )
{ {
adj_type const & hc = m->HighConn(GetHandle()); for(ElementArray<Node>::iterator it = ret.begin(); it != ret.end(); ++it)
if( isPrivate(mask) ) if( invert ^ m->GetPrivateMarker(*it,mask) )
{ aret.push_back(*it);
for(adj_type::size_type it = 0; it < hc.size(); ++it)
if( invert ^ m->GetPrivateMarker(hc[it],mask) )
aret.push_back(hc[it]);
}
else
{
for(adj_type::size_type it = 0; it < hc.size(); ++it)
if( invert ^ m->GetMarker(hc[it],mask) )
aret.push_back(hc[it]);
}
} }
else else
{ {
MarkerType hm = m->HideMarker(); for(ElementArray<Node>::iterator it = ret.begin(); it != ret.end(); ++it)
adj_type const & hc = m->HighConn(GetHandle()); if( invert ^ m->GetMarker(*it,mask) )
if( isPrivate(mask) ) aret.push_back(*it);
{
for(adj_type::size_type it = 0; it < hc.size(); ++it)
if( (invert ^ m->GetPrivateMarker(hc[it],mask)) && !m->GetMarker(hc[it],hm) )
aret.push_back(hc[it]);
}
else
{
for(adj_type::size_type it = 0; it < hc.size(); ++it)
if( (invert ^ m->GetMarker(hc[it],mask)) && !m->GetMarker(hc[it],hm) )
aret.push_back(hc[it]);
}
} }
return aret; return aret;
} }
......
...@@ -71,13 +71,14 @@ namespace INMOST ...@@ -71,13 +71,14 @@ namespace INMOST
Mesh * mesh = GetMeshLink(); Mesh * mesh = GetMeshLink();
std::vector<HandleType> result; std::vector<HandleType> result;
INMOST_DATA_INTEGER_TYPE conn[4] = {0,0,0,0}; INMOST_DATA_INTEGER_TYPE conn[4] = {0,0,0,0};
INMOST_DATA_INTEGER_TYPE myconn = -1, i; INMOST_DATA_INTEGER_TYPE myconn = -1, i = 0;
enumerator ret = 0; enumerator ret = 0;
for(ElementType e = NODE, i = 0; e <= CELL; i++, e = e << 1) for(ElementType e = NODE; e <= CELL; e = NextElementType(e))
{ {
if( _etype & e ) conn[i] = 1; if( _etype & e ) conn[i] = 1;
if( GetElementType() & e ) myconn = i; if( GetElementType() & e ) myconn = i;
i++;
} }
if( !mesh->HideMarker() ) if( !mesh->HideMarker() )
{ {
...@@ -87,53 +88,95 @@ namespace INMOST ...@@ -87,53 +88,95 @@ namespace INMOST
{ {
ret += 1; ret += 1;
} }
else if( i == (myconn + 1 + 4)%4 ) else if( i == myconn + 1 )
{ {
ret += static_cast<enumerator>(mesh->HighConn(GetHandle()).size()); ret += static_cast<enumerator>(mesh->HighConn(GetHandle()).size());
} }
else if( i == (myconn - 1 + 4)%4 ) else if( i == myconn - 1 )
{ {
ret += static_cast<enumerator>(mesh->LowConn(GetHandle()).size()); ret += static_cast<enumerator>(mesh->LowConn(GetHandle()).size());
} }
else if( i == (myconn - 2 + 4)%4 ) else if( i == myconn + 2 )
{ {
MarkerType mrk = mesh->CreatePrivateMarker(); MarkerType mrk = mesh->CreatePrivateMarker();
if( (GetElementType() & NODE) || (GetElementType() & EDGE) ) adj_type const & hc = mesh->HighConn(GetHandle());
for(adj_type::size_type it = 0; it < hc.size(); it++)
{ {
adj_type const & hc = mesh->HighConn(GetHandle()); adj_type const & ihc = mesh->HighConn(hc[it]);
for(adj_type::size_type it = 0; it < hc.size(); it++) for(adj_type::size_type jt = 0; jt < ihc.size(); jt++)
if( !mesh->GetPrivateMarker(ihc[jt],mrk) )
{
result.push_back(ihc[jt]);
mesh->SetPrivateMarker(ihc[jt],mrk);
}
}
ret += static_cast<enumerator>(result.size());
if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
result.clear();
mesh->ReleasePrivateMarker(mrk);
}
else if( i == myconn - 2 )
{
MarkerType mrk = mesh->CreatePrivateMarker();
adj_type const & lc = mesh->LowConn(GetHandle());
for(adj_type::size_type it = 0; it < lc.size(); it++)
{
adj_type const & ilc = mesh->LowConn(lc[it]);
for(adj_type::size_type jt = 0; jt < ilc.size(); jt++)
if( !mesh->GetPrivateMarker(ilc[jt],mrk) )
{
result.push_back(ilc[jt]);
mesh->SetPrivateMarker(ilc[jt],mrk);
}
}
ret += static_cast<enumerator>(result.size());
if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
result.clear();
mesh->ReleasePrivateMarker(mrk);
}
else if( i == myconn + 3 )
{
MarkerType mrk = mesh->CreatePrivateMarker();
adj_type const & hc = mesh->HighConn(GetHandle());
for(adj_type::size_type it = 0; it < hc.size(); it++)
{
adj_type const & ihc = mesh->HighConn(hc[it]);
for(adj_type::size_type jt = 0; jt < ihc.size(); jt++)
{ {
adj_type const & ihc = mesh->HighConn(hc[it]); adj_type const & jhc = mesh->HighConn(ihc[jt]);
for(adj_type::size_type jt = 0; jt < ihc.size(); jt++) for(adj_type::size_type kt = 0; kt < jhc.size(); kt++)
if( !mesh->GetPrivateMarker(ihc[jt],mrk) ) if( !mesh->GetPrivateMarker(jhc[kt],mrk) )
{ {
result.push_back(ihc[jt]); result.push_back(jhc[kt]);
mesh->SetPrivateMarker(ihc[jt],mrk); mesh->SetPrivateMarker(jhc[kt],mrk);
} }
} }
ret += static_cast<enumerator>(result.size());
}
else if( GetElementType() & FACE )
{
ret += static_cast<enumerator>(mesh->LowConn(GetHandle()).size());
} }
else ret += static_cast<enumerator>(result.size());
if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
result.clear();
mesh->ReleasePrivateMarker(mrk);
}
else if( i == myconn - 3 )
{
MarkerType mrk = mesh->CreatePrivateMarker();
adj_type const & lc = mesh->LowConn(GetHandle());
for(adj_type::size_type it = 0; it < lc.size(); it++)
{ {
adj_type const & lc = mesh->LowConn(GetHandle()); adj_type const & ilc = mesh->LowConn(lc[it]);
for(adj_type::size_type it = 0; it < lc.size(); it++) for(adj_type::size_type jt = 0; jt < ilc.size(); jt++)
{ {
adj_type const & ilc = mesh->LowConn(lc[it]); adj_type const & jlc = mesh->LowConn(ilc[jt]);
for(adj_type::size_type jt = 0; jt < ilc.size(); jt++) for(adj_type::size_type kt = 0; kt < jlc.size(); kt++)
if( !mesh->GetPrivateMarker(ilc[jt],mrk) ) if( !mesh->GetPrivateMarker(jlc[kt],mrk) )
{ {
result.push_back(ilc[jt]); result.push_back(jlc[kt]);
mesh->SetPrivateMarker(ilc[jt],mrk); mesh->SetPrivateMarker(jlc[kt],mrk);
} }
} }
ret += static_cast<enumerator>(result.size()); }
} ret += static_cast<enumerator>(result.size());
for(size_t it = 0; it < result.size(); it++) if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
mesh->RemPrivateMarker(result[it],mrk);
result.clear(); result.clear();
mesh->ReleasePrivateMarker(mrk); mesh->ReleasePrivateMarker(mrk);
} }
...@@ -148,55 +191,101 @@ namespace INMOST ...@@ -148,55 +191,101 @@ namespace INMOST
{ {
if( !GetMarker(hm) ) ret ++; if( !GetMarker(hm) ) ret ++;
} }
else if( i == (myconn + 1 + 4)%4 ) else if( i == myconn + 1 )
{ {
adj_type const & hc = mesh->HighConn(GetHandle()); adj_type const & hc = mesh->HighConn(GetHandle());
for(adj_type::size_type it = 0; it < hc.size(); ++it) for(adj_type::size_type it = 0; it < hc.size(); ++it)
if( !mesh->GetMarker(hc[it],hm) ) ret++; if( !mesh->GetMarker(hc[it],hm) ) ret++;
} }
else if( i == (myconn - 1 + 4)%4 ) else if( i == myconn - 1 )
{ {
adj_type const & lc = mesh->LowConn(GetHandle()); adj_type const & lc = mesh->LowConn(GetHandle());
for(adj_type::size_type it = 0; it < lc.size(); ++it) for(adj_type::size_type it = 0; it < lc.size(); ++it)
if( !mesh->GetMarker(lc[it],hm) ) ret++; if( !mesh->GetMarker(lc[it],hm) ) ret++;
} }
else if( i == (myconn - 2 + 4)%4 ) else if( i == myconn + 2 )
{ {
MarkerType mrk = mesh->CreatePrivateMarker(); MarkerType mrk = mesh->CreatePrivateMarker();
if( (GetElementType() & NODE) || (GetElementType() & EDGE) ) adj_type const & hc = mesh->HighConn(GetHandle());
for(adj_type::size_type it = 0; it < hc.size(); it++) if( !mesh->GetMarker(hc[it],hm) )
{ {
adj_type const & hc = mesh->HighConn(GetHandle()); adj_type const & ihc = mesh->HighConn(hc[it]);
for(adj_type::size_type it = 0; it < hc.size(); it++) if( !mesh->GetMarker(hc[it],hm) ) for(adj_type::size_type jt = 0; jt < ihc.size(); jt++) if( !mesh->GetMarker(ihc[jt],hm) )
{ {
adj_type const & ihc = mesh->HighConn(hc[it]); if( !mesh->GetPrivateMarker(ihc[jt],mrk) )
for(adj_type::size_type jt = 0; jt < ihc.size(); jt++) if( !mesh->GetMarker(ihc[jt],hm) ) {
result.push_back(ihc[jt]);
mesh->SetPrivateMarker(ihc[jt],mrk);
}
}
}
ret += static_cast<enumerator>(result.size());
if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
result.clear();
mesh->ReleasePrivateMarker(mrk);
}
else if( i == myconn - 2 )
{
MarkerType mrk = mesh->CreatePrivateMarker();
adj_type const & lc = mesh->LowConn(GetHandle());
for(adj_type::size_type it = 0; it < lc.size(); it++) if( !mesh->GetMarker(lc[it],hm) )
{
adj_type const & ilc = mesh->LowConn(lc[it]);
for(adj_type::size_type jt = 0; jt < ilc.size(); jt++) if( !mesh->GetMarker(ilc[jt],hm) )
if( !mesh->GetPrivateMarker(ilc[jt],mrk) )
{ {
if( !mesh->GetPrivateMarker(ihc[jt],mrk) ) result.push_back(ilc[jt]);
mesh->SetPrivateMarker(ilc[jt],mrk);
}
}
ret += static_cast<enumerator>(result.size());
if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
result.clear();
mesh->ReleasePrivateMarker(mrk);
}
else if( i == myconn + 3 )
{
MarkerType mrk = mesh->CreatePrivateMarker();
adj_type const & hc = mesh->HighConn(GetHandle());
for(adj_type::size_type it = 0; it < hc.size(); it++) if( !mesh->GetMarker(hc[it],hm) )
{
adj_type const & ihc = mesh->HighConn(hc[it]);
for(adj_type::size_type jt = 0; jt < ihc.size(); jt++) if( !mesh->GetMarker(ihc[jt],hm) )
{
adj_type const & jhc = mesh->HighConn(ihc[jt]);
for(adj_type::size_type kt = 0; kt < jhc.size(); kt++) if( !mesh->GetMarker(jhc[kt],hm) )
if( !mesh->GetPrivateMarker(jhc[kt],mrk) )
{ {
result.push_back(ihc[jt]); result.push_back(jhc[kt]);
mesh->SetPrivateMarker(ihc[jt],mrk); mesh->SetPrivateMarker(jhc[kt],mrk);
} }
}
} }
ret += static_cast<enumerator>(result.size());
} }
else ret += static_cast<enumerator>(result.size());
if( !result.empty() ) mesh->RemPrivateMarkerArray(&result[0],result.size(),mrk);
result.clear();
mesh->ReleasePrivateMarker(mrk);
}
else if( i == myconn - 3 )
{
MarkerType mrk = mesh->CreatePrivateMarker();
adj_type const & lc = mesh->LowConn(GetHandle());