X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FStdMeshers%2FStdMeshers_ViscousLayers2D.cxx;h=4e78b7157b52a5b3eb869b48ef60cdee994ae9f3;hb=65c1beab50fcec33a4e988c10b3fedb081543164;hp=585bcaf7164c2181e35fecb80b4cf8ca08f94f87;hpb=c98d9fcd7f02c1f1f5c24dd3e709ed75228d66c4;p=modules%2Fsmesh.git diff --git a/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx b/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx index 585bcaf71..4e78b7157 100644 --- a/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx +++ b/src/StdMeshers/StdMeshers_ViscousLayers2D.cxx @@ -113,6 +113,7 @@ namespace VISCOUS_2D //virtual int NbElements() const { return _elements.size()+1; } virtual int NbNodes() const { return Max( 0, _uvPtStructVec.size()-2 ); } void SetUVPtStructVec(UVPtStructVec& vec) { _uvPtStructVec.swap( vec ); } + UVPtStructVec& GetUVPtStructVec() { return _uvPtStructVec; } }; _ProxyMeshOfFace(const SMESH_Mesh& mesh): SMESH_ProxyMesh(mesh) {} _EdgeSubMesh* GetEdgeSubMesh(int ID) { return (_EdgeSubMesh*) getProxySubMesh(ID); } @@ -299,6 +300,8 @@ namespace VISCOUS_2D double _D; // _vec1.Crossed( _vec2 ) double _param1, _param2; // intersection param on _seg1 and _seg2 + _SegmentIntersection(): _param1(0), _param2(0), _D(0) {} + bool Compute(const _Segment& seg1, const _Segment& seg2, bool seg2IsRay = false ) { // !!! If seg2IsRay, returns true at any _param2 !!! @@ -515,29 +518,53 @@ SMESH_ProxyMesh::Ptr StdMeshers_ViscousLayers2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Face& theFace) { - SMESH_ProxyMesh::Ptr pm; - + using namespace VISCOUS_2D; vector< const StdMeshers_ViscousLayers2D* > hyps; vector< TopoDS_Shape > hypShapes; - if ( VISCOUS_2D::findHyps( theMesh, theFace, hyps, hypShapes )) + + SMESH_ProxyMesh::Ptr pm = _ProxyMeshHolder::FindProxyMeshOfFace( theFace, theMesh ); + if ( !pm ) { - VISCOUS_2D::_ViscousBuilder2D builder( theMesh, theFace, hyps, hypShapes ); - pm = builder.Compute(); - SMESH_ComputeErrorPtr error = builder.GetError(); - if ( error && !error->IsOK() ) - theMesh.GetSubMesh( theFace )->GetComputeError() = error; - else if ( !pm ) + if ( findHyps( theMesh, theFace, hyps, hypShapes )) + { + VISCOUS_2D::_ViscousBuilder2D builder( theMesh, theFace, hyps, hypShapes ); + pm = builder.Compute(); + SMESH_ComputeErrorPtr error = builder.GetError(); + if ( error && !error->IsOK() ) + theMesh.GetSubMesh( theFace )->GetComputeError() = error; + else if ( !pm ) + pm.reset( new SMESH_ProxyMesh( theMesh )); + if ( getenv("__ONLY__VL2D__")) + pm.reset(); + } + else + { pm.reset( new SMESH_ProxyMesh( theMesh )); - if ( getenv("__ONLY__VL2D__")) - pm.reset(); - } - else - { - pm.reset( new SMESH_ProxyMesh( theMesh )); + } } return pm; } // -------------------------------------------------------------------------------- +void StdMeshers_ViscousLayers2D::SetProxyMeshOfEdge( const StdMeshers_FaceSide& edgeNodes ) +{ + using namespace VISCOUS_2D; + SMESH_ProxyMesh::Ptr pm = + _ProxyMeshHolder::FindProxyMeshOfFace( edgeNodes.Face(), *edgeNodes.GetMesh() ); + if ( !pm ) { + _ProxyMeshOfFace* proxyMeshOfFace = new _ProxyMeshOfFace( *edgeNodes.GetMesh() ); + pm.reset( proxyMeshOfFace ); + new _ProxyMeshHolder( edgeNodes.Face(), pm ); + } + _ProxyMeshOfFace* proxyMeshOfFace = static_cast<_ProxyMeshOfFace*>( pm.get() ); + _ProxyMeshOfFace::_EdgeSubMesh* sm = proxyMeshOfFace->GetEdgeSubMesh( edgeNodes.EdgeID(0) ); + sm->GetUVPtStructVec() = edgeNodes.GetUVPtStruct(); +} +// -------------------------------------------------------------------------------- +bool StdMeshers_ViscousLayers2D::HasProxyMesh( const TopoDS_Face& face, SMESH_Mesh& mesh ) +{ + return VISCOUS_2D::_ProxyMeshHolder::FindProxyMeshOfFace( face, mesh ); +} +// -------------------------------------------------------------------------------- SMESH_ComputeErrorPtr StdMeshers_ViscousLayers2D::CheckHypothesis(SMESH_Mesh& theMesh, const TopoDS_Shape& theShape, @@ -1794,7 +1821,7 @@ bool _ViscousBuilder2D::shrink() // x-x-x-x-----x-----x---- // | | | | e1 e2 e3 - int isRShrinkedForAdjacent; + int isRShrinkedForAdjacent = 0; UVPtStructVec nodeDataForAdjacent; for ( int isR = 0; isR < 2; ++isR ) {