PR: debug generate flat elements

This commit is contained in:
prascle 2011-05-12 12:50:51 +00:00
parent d2dabee708
commit 8c9a971309
2 changed files with 26 additions and 5 deletions

View File

@ -314,8 +314,8 @@ int SMDS_UnstructuredGrid::CellIdToDownId(int vtkCellId)
{ {
if((vtkCellId < 0) || (vtkCellId >= _cellIdToDownId.size())) if((vtkCellId < 0) || (vtkCellId >= _cellIdToDownId.size()))
{ {
std::cerr << "SMDS_UnstructuredGrid::CellIdToDownId problem vtkCellId=" //MESSAGE("SMDS_UnstructuredGrid::CellIdToDownId structure not up to date: vtkCellId="
<< vtkCellId << " max="<< _cellIdToDownId.size() << std::endl; // << vtkCellId << " max="<< _cellIdToDownId.size());
return -1; return -1;
} }
return _cellIdToDownId[vtkCellId]; return _cellIdToDownId[vtkCellId];
@ -768,6 +768,11 @@ int SMDS_UnstructuredGrid::GetParentVolumes(int* volVtkIds, int vtkId)
if (dim == 1) if (dim == 1)
{ {
int downId = this->CellIdToDownId(vtkId); int downId = this->CellIdToDownId(vtkId);
if (downId < 0)
{
MESSAGE("Downward structure not up to date: new edge not taken into account");
return 0;
}
nbFaces = _downArray[vtkType]->getNumberOfUpCells(downId); nbFaces = _downArray[vtkType]->getNumberOfUpCells(downId);
const int *upCells = _downArray[vtkType]->getUpCells(downId); const int *upCells = _downArray[vtkType]->getUpCells(downId);
const unsigned char* upTypes = _downArray[vtkType]->getUpTypes(downId); const unsigned char* upTypes = _downArray[vtkType]->getUpTypes(downId);
@ -783,7 +788,13 @@ int SMDS_UnstructuredGrid::GetParentVolumes(int* volVtkIds, int vtkId)
nbFaces = 1; nbFaces = 1;
faces[0] = vtkId; faces[0] = vtkId;
cellTypes[0] = this->GetCellType(vtkId); cellTypes[0] = this->GetCellType(vtkId);
downCellId[0] = this->CellIdToDownId(vtkId); int downId = this->CellIdToDownId(vtkId);
if (downId < 0)
{
MESSAGE("Downward structure not up to date: new face not taken into account");
return 0;
}
downCellId[0] = downId;
} }
int nbvol =0; int nbvol =0;

View File

@ -10969,7 +10969,11 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
int vtkType = grid->GetCellType(vtkId); int vtkType = grid->GetCellType(vtkId);
int downId = grid->CellIdToDownId(vtkId); int downId = grid->CellIdToDownId(vtkId);
if (downId < 0) if (downId < 0)
continue; {
MESSAGE("doubleNodesOnGroupBoundaries: internal algorithm problem");
continue; // not OK at this stage of the algorithm:
//no cells created after BuildDownWardConnectivity
}
DownIdType aCell(downId, vtkType); DownIdType aCell(downId, vtkType);
if (celldom.count(vtkId)) if (celldom.count(vtkId))
continue; continue;
@ -11047,6 +11051,11 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
nodeDomains[oldId][idom] = newId; // cloned node for other domains nodeDomains[oldId][idom] = newId; // cloned node for other domains
//MESSAGE(" newNode " << newId << " oldNode " << oldId << " size=" <<nodeDomains[oldId].size()); //MESSAGE(" newNode " << newId << " oldNode " << oldId << " size=" <<nodeDomains[oldId].size());
} }
if (nodeDomains[oldId].size() >= 3)
{
//MESSAGE("confirm multiple node " << oldId);
isMultipleDetected =true;
}
} }
} }
if (isMultipleDetected) // check if an edge of the face is shared between 3 or more domains if (isMultipleDetected) // check if an edge of the face is shared between 3 or more domains
@ -11212,6 +11221,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
} }
else else
{ {
//MESSAGE("Quadratic multiple joints not implemented");
// TODO quadratic nodes // TODO quadratic nodes
} }
} }
@ -11241,7 +11251,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
int vtkType = grid->GetCellType(vtkId); int vtkType = grid->GetCellType(vtkId);
int downId = grid->CellIdToDownId(vtkId); int downId = grid->CellIdToDownId(vtkId);
if (downId < 0) if (downId < 0)
continue; continue; // new cells: not to be modified
DownIdType aCell(downId, vtkType); DownIdType aCell(downId, vtkType);
int volParents[1000]; int volParents[1000];
int nbvol = grid->GetParentVolumes(volParents, vtkId); int nbvol = grid->GetParentVolumes(volParents, vtkId);