23047: [CEA 1472] Incorrect mesh with Netgen 1D-2D-3D but not reported in error
1) fix hasBadElemOnSolid() to report non-coupled edges 2) fix Compute() to report an error about bad elements in addition to a more general message IPAL52687: NETGEN 1D2D3D fails on a box with meshed (by sub-meshes) holes and two sides FillNgMesh(): do not add nodes on degenerated edges
This commit is contained in:
parent
ce66305970
commit
e718de74b8
@ -1041,7 +1041,8 @@ bool NETGENPlugin_Mesher::FillNgMesh(netgen::OCCGeometry& occgeom,
|
|||||||
while ( const TopoDS_Shape* e = ansIt->next() )
|
while ( const TopoDS_Shape* e = ansIt->next() )
|
||||||
{
|
{
|
||||||
SMESH_subMesh* eSub = helper.GetMesh()->GetSubMesh( *e );
|
SMESH_subMesh* eSub = helper.GetMesh()->GetSubMesh( *e );
|
||||||
if (( toAdd = eSub->IsEmpty() )) break;
|
if (( toAdd = ( eSub->IsEmpty() && !SMESH_Algo::isDegenerated( TopoDS::Edge( *e )))))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if ( toAdd )
|
if ( toAdd )
|
||||||
{
|
{
|
||||||
@ -1885,7 +1886,7 @@ int NETGENPlugin_Mesher::FillSMesh(const netgen::OCCGeometry& occgeo,
|
|||||||
gp_Pnt p ( NGPOINT_COORDS(ngPoint) );
|
gp_Pnt p ( NGPOINT_COORDS(ngPoint) );
|
||||||
for (int iV = i-nbInitNod; aVert.IsNull() && iV <= occgeo.vmap.Extent(); ++iV)
|
for (int iV = i-nbInitNod; aVert.IsNull() && iV <= occgeo.vmap.Extent(); ++iV)
|
||||||
{
|
{
|
||||||
aVert = TopoDS::Vertex( occgeo.vmap( iV ) );
|
aVert = TopoDS::Vertex( occgeo.vmap( iV ));
|
||||||
gp_Pnt pV = BRep_Tool::Pnt( aVert );
|
gp_Pnt pV = BRep_Tool::Pnt( aVert );
|
||||||
if ( p.SquareDistance( pV ) > 1e-20 )
|
if ( p.SquareDistance( pV ) > 1e-20 )
|
||||||
aVert.Nullify();
|
aVert.Nullify();
|
||||||
@ -2229,16 +2230,17 @@ namespace
|
|||||||
for ( ; e != elems.end(); ++e )
|
for ( ; e != elems.end(); ++e )
|
||||||
{
|
{
|
||||||
const SMDS_MeshElement* elem = *e;
|
const SMDS_MeshElement* elem = *e;
|
||||||
if ( elem->GetType() != SMDSAbs_Face )
|
// if ( elem->GetType() != SMDSAbs_Face ) -- 23047
|
||||||
continue;
|
// continue;
|
||||||
int nbNodesOnSolid = 0;
|
int nbNodesOnSolid = 0, nbNodes = elem->NbNodes();
|
||||||
SMDS_NodeIteratorPtr nIt = elem->nodeIterator();
|
SMDS_NodeIteratorPtr nIt = elem->nodeIterator();
|
||||||
while ( nIt->more() )
|
while ( nIt->more() )
|
||||||
{
|
{
|
||||||
const SMDS_MeshNode* n = nIt->next();
|
const SMDS_MeshNode* n = nIt->next();
|
||||||
const TopoDS_Shape& s = mesh->IndexToShape( n->getshapeId() );
|
const TopoDS_Shape& s = mesh->IndexToShape( n->getshapeId() );
|
||||||
nbNodesOnSolid += ( !s.IsNull() && solidSubs.Contains( s ));
|
nbNodesOnSolid += ( !s.IsNull() && solidSubs.Contains( s ));
|
||||||
if ( nbNodesOnSolid > 2 )
|
if ( nbNodesOnSolid > 2 ||
|
||||||
|
nbNodesOnSolid == nbNodes)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2279,7 +2281,7 @@ bool NETGENPlugin_Mesher::Compute()
|
|||||||
SMESH_MesherHelper quadHelper( *_mesh );
|
SMESH_MesherHelper quadHelper( *_mesh );
|
||||||
quadHelper.SetIsQuadratic( mparams.secondorder );
|
quadHelper.SetIsQuadratic( mparams.secondorder );
|
||||||
|
|
||||||
static string debugFile = "/tmp/ngMesh.py"; /* to call toPython( ngMesh, debugFile )
|
static string debugFile = "/tmp/ngMesh.py"; /* to call toPython( _ngMesh, debugFile )
|
||||||
while debugging netgen */
|
while debugging netgen */
|
||||||
// -------------------------
|
// -------------------------
|
||||||
// Prepare OCC geometry
|
// Prepare OCC geometry
|
||||||
@ -2819,8 +2821,11 @@ bool NETGENPlugin_Mesher::Compute()
|
|||||||
}
|
}
|
||||||
SMESH_ComputeErrorPtr readErr = ReadErrors(nodeVec);
|
SMESH_ComputeErrorPtr readErr = ReadErrors(nodeVec);
|
||||||
if ( readErr && !readErr->myBadElements.empty() )
|
if ( readErr && !readErr->myBadElements.empty() )
|
||||||
|
{
|
||||||
error = readErr;
|
error = readErr;
|
||||||
|
if ( !comment.empty() && !readErr->myComment.empty() ) comment += "\n";
|
||||||
|
comment += readErr->myComment;
|
||||||
|
}
|
||||||
if ( error->IsOK() && ( !isOK || comment.size() > 0 ))
|
if ( error->IsOK() && ( !isOK || comment.size() > 0 ))
|
||||||
error->myName = COMPERR_ALGO_FAILED;
|
error->myName = COMPERR_ALGO_FAILED;
|
||||||
if ( !comment.empty() )
|
if ( !comment.empty() )
|
||||||
|
Loading…
Reference in New Issue
Block a user