IPAL52450: Mesh generation fails due to viscous layers

This commit is contained in:
eap 2014-07-16 16:30:28 +04:00
parent a5f7916fb6
commit bcfa36bbd0
5 changed files with 509 additions and 199 deletions

View File

@ -2328,6 +2328,7 @@ bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap & theParam2
while ( ++u_n != sortedBaseNN.end() && !isNodeInSubMesh( u_n->second, faceSubMesh ));
sortedBaseNN.erase( sortedBaseNN.begin(), u_n );
}
if ( !sortedBaseNN.empty() )
if ( u_n = --sortedBaseNN.end(), !isNodeInSubMesh( u_n->second, faceSubMesh ))
{
while ( u_n != sortedBaseNN.begin() && !isNodeInSubMesh( (--u_n)->second, faceSubMesh ));
@ -2349,7 +2350,7 @@ bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap & theParam2
u2nn->second.push_back( u_n->second );
}
}
if ( theParam2ColumnMap.empty() )
if ( theParam2ColumnMap.size() < 2 )
return false;
}

View File

@ -1735,6 +1735,8 @@ bool SMESH_subMesh::ComputeStateEngine(int event)
case CHECK_COMPUTE_STATE:
if ( IsMeshComputed() )
_computeState = COMPUTE_OK;
else if ( _computeError && _computeError->IsKO() )
_computeState = FAILED_TO_COMPUTE;
break;
default:
ASSERT(0);

View File

@ -1460,8 +1460,11 @@ SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr
// if ( sm->GetSubShape().ShapeType() == TopAbs_VERTEX )
// break;
SMESH_ComputeErrorPtr error = sm->GetComputeError();
if ( error && !error->IsOK() && error->myAlgo )
if ( error && !error->IsOK() )
{
if ( !( error->myAlgo ) &&
!( error->myAlgo = sm->GetAlgo() ))
continue;
SMESH::ComputeError & errStruct = error_array[ nbErr++ ];
errStruct.code = -( error->myName < 0 ? error->myName + 1: error->myName ); // -1 -> 0
errStruct.comment = error->myComment.c_str();

View File

@ -371,8 +371,9 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh & aMesh,
for ( int i = 0; i < 6; ++i )
{
const TopoDS_Face& sideF = aCubeSide[i]._quad->face;
if ( !SMESH_MesherHelper::IsSameElemGeometry( meshDS->MeshElements( sideF ),
SMDSGeom_QUADRANGLE,
const SMESHDS_SubMesh* smDS =
proxymesh ? proxymesh->GetSubMesh( sideF ) : meshDS->MeshElements( sideF );
if ( !SMESH_MesherHelper::IsSameElemGeometry( smDS, SMDSGeom_QUADRANGLE,
/*nullSubMeshRes=*/false ))
{
SMESH_ComputeErrorPtr err = ComputePentahedralMesh(aMesh, aShape, proxymesh.get());

File diff suppressed because it is too large Load Diff