Version: 9.16.0
StdMeshers_ViscousLayers.hxx
Go to the documentation of this file.
1// Copyright (C) 2007-2026 CEA, EDF, OPEN CASCADE
2//
3// This library is free software; you can redistribute it and/or
4// modify it under the terms of the GNU Lesser General Public
5// License as published by the Free Software Foundation; either
6// version 2.1 of the License, or (at your option) any later version.
7//
8// This library is distributed in the hope that it will be useful,
9// but WITHOUT ANY WARRANTY; without even the implied warranty of
10// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11// Lesser General Public License for more details.
12//
13// You should have received a copy of the GNU Lesser General Public
14// License along with this library; if not, write to the Free Software
15// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16//
17// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18//
19
20// File : StdMeshers_ViscousLayers.hxx
21// Created : Wed Dec 1 15:15:34 2010
22// Author : Edward AGAPOV (eap)
23
24#ifndef __StdMeshers_ViscousLayers_HXX__
25#define __StdMeshers_ViscousLayers_HXX__
26
27#include "SMESH_StdMeshers.hxx"
28
29#include "SMESH_Hypothesis.hxx"
30#include "SMESH_ProxyMesh.hxx"
32
33#include <vector>
34
35class SMDS_MeshGroup;
36
41{
42public:
43 StdMeshers_ViscousLayers(int hypId, SMESH_Gen* gen);
44
45 // Set boundary shapes (faces in 3D, edges in 2D) either to exclude from
46 // treatment or to make the Viscous Layers on
47 void SetBndShapes(const std::vector<int>& shapeIds, bool toIgnore);
48 std::vector<int> GetBndShapes() const { return _shapeIds; }
49 bool IsToIgnoreShapes() const { return _isToIgnoreShapes; }
50
51 // Set total thickness of layers of prisms
52 void SetTotalThickness(double thickness);
53 double GetTotalThickness() const { return _thickness; }
54
55 // Set number of layers of prisms
56 void SetNumberLayers(int nb);
57 int GetNumberLayers() const { return _nbLayers; }
58
59 // Set factor (>1.0) of growth of layer thickness towards inside of mesh
60 void SetStretchFactor(double factor);
61 double GetStretchFactor() const { return _stretchFactor; }
62
63 // Method of computing node translation
65 // node is translated along normal to a surface with possible further smoothing
67 // node is translated along the average normal of surrounding faces till
68 // intersection with a neighbor face translated along its own normal
69 // by the layers thickness
71 // node is translated along the average normal of surrounding faces
72 // by the layers thickness
74 };
75 void SetMethod( ExtrusionMethod how );
76 ExtrusionMethod GetMethod() const { return _method; }
77
78 // name of a group to create
79 void SetGroupName(const std::string& name);
80 const std::string& GetGroupName() const { return _groupName; }
81 static SMDS_MeshGroup* CreateGroup( const std::string& theName,
82 SMESH_Mesh& theMesh,
83 SMDSAbs_ElementType theType);
84
85 // Computes temporary 2D mesh to be used by 3D algorithm.
86 // Return SMESH_ProxyMesh for each SOLID in theShape
87 SMESH_ProxyMesh::Ptr Compute(SMESH_Mesh& theMesh,
88 const TopoDS_Shape& theShape,
89 const bool toMakeN2NMap=false) const;
90
91 // Checks compatibility of assigned StdMeshers_ViscousLayers hypotheses
93 CheckHypothesis(SMESH_Mesh& aMesh,
94 const TopoDS_Shape& aShape,
96
97 // Compute thickness of the 1st layer
98 static double Get1stLayerThickness( double thickTotal,
99 double factor,
100 int nbLayers );
101
102 // Checks if viscous layers should be constructed on a shape
103 bool IsShapeWithLayers(int shapeIndex) const;
104
105 virtual std::ostream & SaveTo(std::ostream & save);
106 virtual std::istream & LoadFrom(std::istream & load);
107
114 virtual bool SetParametersByMesh(const SMESH_Mesh* theMesh, const TopoDS_Shape& theShape);
115
120 virtual bool SetParametersByDefaults(const TDefaults& /*dflts*/, const SMESH_Mesh* /*theMesh*/=0)
121 { return false; }
122
123 static const char* GetHypType() { return "ViscousLayers"; }
124
125 private:
126
127 std::vector<int> _shapeIds;
133 std::string _groupName;
134};
135
136class SMESH_subMesh;
137namespace VISCOUS_3D
138{
139 // sets a sub-mesh event listener to clear sub-meshes of sub-shapes of
140 // the main shape when sub-mesh of the main shape is cleared,
141 // for example to clear sub-meshes of FACEs when sub-mesh of a SOLID
142 // is cleared
143 void ToClearSubWithMain( SMESH_subMesh* sub, const TopoDS_Shape& main);
144}
145
146#endif
SMDSAbs_ElementType
Type (node, edge, face or volume) of elements.
Definition: SMDSAbs_ElementType.hxx:34
boost::shared_ptr< SMESH_ComputeError > SMESH_ComputeErrorPtr
Definition: SMESH_ComputeError.hxx:38
#define STDMESHERS_EXPORT
Definition: SMESH_StdMeshers.hxx:38
Definition: SMDS_MeshGroup.hxx:37
virtual std::istream & LoadFrom(std::istream &load)=0
virtual std::ostream & SaveTo(std::ostream &save)=0
Definition: SMESH_Gen.hxx:68
Definition: SMESH_Hypothesis.hxx:48
Hypothesis_Status
Definition: SMESH_Hypothesis.hxx:51
virtual bool SetParametersByMesh(const SMESH_Mesh *theMesh, const TopoDS_Shape &theShape)=0
Initialize my parameter values by the mesh built on the geometry.
Definition: SMESH_Mesh.hxx:80
boost::shared_ptr< SMESH_ProxyMesh > Ptr
Definition: SMESH_ProxyMesh.hxx:54
Definition: SMESH_subMesh.hxx:61
Hypothesis defining parameters of viscous layers.
Definition: StdMeshers_ViscousLayers.hxx:41
int _nbLayers
Definition: StdMeshers_ViscousLayers.hxx:129
ExtrusionMethod _method
Definition: StdMeshers_ViscousLayers.hxx:132
const std::string & GetGroupName() const
Definition: StdMeshers_ViscousLayers.hxx:80
ExtrusionMethod GetMethod() const
Definition: StdMeshers_ViscousLayers.hxx:76
double GetStretchFactor() const
Definition: StdMeshers_ViscousLayers.hxx:61
ExtrusionMethod
Definition: StdMeshers_ViscousLayers.hxx:64
@ FACE_OFFSET
Definition: StdMeshers_ViscousLayers.hxx:70
@ SURF_OFFSET_SMOOTH
Definition: StdMeshers_ViscousLayers.hxx:66
int GetNumberLayers() const
Definition: StdMeshers_ViscousLayers.hxx:57
double _stretchFactor
Definition: StdMeshers_ViscousLayers.hxx:131
std::vector< int > _shapeIds
Definition: StdMeshers_ViscousLayers.hxx:127
bool IsToIgnoreShapes() const
Definition: StdMeshers_ViscousLayers.hxx:49
std::string _groupName
Definition: StdMeshers_ViscousLayers.hxx:133
static const char * GetHypType()
Definition: StdMeshers_ViscousLayers.hxx:123
bool _isToIgnoreShapes
Definition: StdMeshers_ViscousLayers.hxx:128
std::vector< int > GetBndShapes() const
Definition: StdMeshers_ViscousLayers.hxx:48
double _thickness
Definition: StdMeshers_ViscousLayers.hxx:130
virtual bool SetParametersByDefaults(const TDefaults &, const SMESH_Mesh *=0)
Initialize my parameter values by default parameters.
Definition: StdMeshers_ViscousLayers.hxx:120
double GetTotalThickness() const
Definition: StdMeshers_ViscousLayers.hxx:53
int main(int argc, char **argv)
Definition: mprint_version.cxx:28
@ NODE_OFFSET
Definition: SMESH_BasicHypothesis.idl:895
Definition: StdMeshers_ViscousLayers.cxx:126
void ToClearSubWithMain(SMESH_subMesh *sub, const TopoDS_Shape &main)
sets a sub-mesh event listener to clear sub-meshes of sub-shapes of the main shape when sub-mesh of t...
Definition: StdMeshers_ViscousLayers.cxx:261
Definition: SMESH_Hypothesis.hxx:100