From: eap
Date: Wed, 25 Feb 2015 17:07:02 +0000 (+0300)
Subject: 22874: [CEA 1425] Performance SMESH Module
XGitTag: V7_6_0a1~16
XGitUrl: http://git.salomeplatform.org/gitweb/?p=modules%2Fsmesh.git;a=commitdiff_plain;h=fd1943809d016d0223da20a2a492b157cb17146a
22874: [CEA 1425] Performance SMESH Module
some optimization of Publish...() + doc imp

diff git a/doc/salome/gui/SMESH/images/bflection1d.png b/doc/salome/gui/SMESH/images/bflection1d.png
old mode 100755
new mode 100644
index e160cf5..b0e366b
Binary files a/doc/salome/gui/SMESH/images/bflection1d.png and b/doc/salome/gui/SMESH/images/bflection1d.png differ
diff git a/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc
index 6ba1061..7516952 100644
 a/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc
+++ b/doc/salome/gui/SMESH/input/1d_meshing_hypo.doc
@@ 2,18 +2,39 @@
\page a1d_meshing_hypo_page 1D Meshing Hypotheses

+Basic 1D hypothesis specifies:
+
+ how \ref a1d_algos_anchor "Wire Discretization" should divide the edge;
+ how \ref a1d_algos_anchor "Composite Side Discretization" should divide the group of C1continues edges.
+
+
+By type of nodes distribution the 1D hypotheses can be categorized as follows:
 \ref adaptive_1d_anchor "Adaptive"
 \ref arithmetic_1d_anchor "Arithmetic 1D"
 \ref geometric_1d_anchor "Geometric Progression"
 \ref average_length_anchor "Local Length"
 \ref max_length_anchor "Max Size"
 \ref deflection_1d_anchor "Deflection 1D"
 \ref number_of_segments_anchor "Number of segments"
 \ref start_and_end_length_anchor "Start and end length"
 \ref automatic_length_anchor "Automatic Length"
 \ref fixed_points_1d_anchor "Fixed points 1D"
+ Uniform distribution
+
+  \ref average_length_anchor "Local Length"
+  \ref max_length_anchor "Max Size"
+  \ref number_of_segments_anchor "Number of segments" with Equidistant distribution
+  \ref automatic_length_anchor "Automatic Length"
+
+ Constantly increasing or decreasing length of segments
+
+  \ref arithmetic_1d_anchor "Arithmetic 1D"
+  \ref geometric_1d_anchor "Geometric Progression"
+  \ref start_and_end_length_anchor "Start and end length"
+  \ref number_of_segments_anchor "Number of segments" with Scale distribution
+
+ Distribution depending on curvature
+
+  \ref adaptive_1d_anchor "Adaptive"
+  \ref deflection_1d_anchor "Deflection 1D"
+
+ Arbitrary distribution
+
+  \ref fixed_points_1d_anchor "Fixed points 1D"
+  \ref number_of_segments_anchor "Number of segments" with
+ \ref analyticdensity_anchor "Analytic Density Distribution" or Table Density Distribution
+
@@ 91,13 +112,14 @@ Add button to add the selected edges to the list.
Deflection 1D hypothesis
Deflection 1D hypothesis can be applied for meshing curvilinear edges
composing your geometrical object. It uses only one parameter: the
value of deflection.
\n A geometrical edge is divided into equal segments. The maximum
distance between a point on the edge within a segment and the line
connecting the ends of the segment should not exceed the specified
value of deflection . Then mesh nodes are constructed at end segment
locations and 1D mesh elements are constructed on segments.
+composing your geometrical object. It defines only one parameter: the
+value of deflection (or chord error).
+
+A geometrical edge is divided into segments of length depending on
+edge curvature. The more curved the edge, the shorter the
+segment. Nodes on the edge are placed so that the maximum distance
+between the edge and a segment approximating a part of edge between
+two nodes should not exceed the value of deflection.
\image html adeflection1d.png
@@ 112,25 +134,21 @@ locations and 1D mesh elements are constructed on segments.
Local Length hypothesis can be applied for meshing of edges
composing your geometrical object. Definition of this hypothesis
consists of setting the \b length of segments, which will split these
edges, and the \b precision of rounding. The points on the edges
generated by these segments will represent nodes of your mesh.
Later these nodes will be used for meshing of the faces abutting to
these edges.

The \b precision parameter is used to allow rounding a number of
segments, calculated from the edge length and average length of
segment, to the lower integer, if this value outstands from it in
bounds of the precision. Otherwise, the number of segments is rounded
to the higher integer. Use value 0.5 to provide rounding to the
nearest integer, 1.0 for the lower integer, 0.0 for the higher
+consists of setting the \b length of segments, which will approximate these
+edges, and the \b precision of rounding.
+
+The \b precision parameter is used to round a number of segments,
+calculated by dividing the edge length by the specified \b length of
+segment, to the higher integer if the remainder exceeds the precision
+and to the lower integer otherwise. Use value 0.5 to provide rounding
+to the nearest integer, 1.0 for the lower integer, 0.0 for the higher
integer. Default value is 1e07.
\image html image41.gif
\image html aaveragelength.png
\image html berage_length.png "Local Length hypothesis  all 1D mesh elements are roughly equal"
+\image html berage_length.png "Local Length hypothesis  all 1D mesh segments are equal"
See Also a sample TUI Script of a
\ref tui_average_length "Defining Local Length" hypothesis
@@ 141,7 +159,7 @@ operation.
Max Size hypothesis allows splitting geometrical edges into
segments not longer than the given length. Definition of this hypothesis
consists of setting the maximal allowed \b length of segments.
Use preestimated length check box lets you specify \b length
+Use preestimated length check box lets you use \b length
automatically calculated basing on size of your geometrical object,
namely as diagonal of bounding box divided by ten. The divider can be
changed via "Ratio Bounding Box Diagonal / Max Size"
@@ 155,14 +173,9 @@ geometrical object has been selected before hypothesis definition.
\anchor number_of_segments_anchor
Number of segments hypothesis
Number of segments hypothesis can be applied for meshing of edges
composing your geometrical object. Definition of this hypothesis
consists of setting the number of segments, which will split these
edges. In other words your edges will be split into a definite number
of segments with approximately the same length. The points on the
edges generated by these segments will represent nodes of your
mesh. Later these nodes will be used for meshing of the faces abutting
to these edges.
+Number of segments hypothesis can be applied for approximating
+edges by a definite number of mesh segments with length depending on
+the selected type of distribution of nodes.
The direction of the splitting is defined by the orientation of the
underlying geometrical edge. "Reverse Edges" list box allows to
@@ 175,7 +188,7 @@ Object Browser.
\image html image46.gif
You can set the type of distribution for this hypothesis in the
+You can set the type of node distribution for this hypothesis in the
Hypothesis Construction dialog bog :
\image html anbsegments1.png
@@ 232,9 +245,7 @@ operation.
Start and End Length hypothesis allows to divide a geometrical edge
into segments so that the first and the last segments have a specified
length. The length of medium segments changes with automatically chosen
geometric progression. Then mesh nodes are
constructed at segment ends location and 1D mesh elements are
constructed on them.
+geometric progression.
The direction of the splitting is defined by the orientation of the
underlying geometrical edge. "Reverse Edges" list box allows to
@@ 259,25 +270,25 @@ hypothesis operation.
The dialog box prompts you to define the quality of the future mesh by
only one parameter, which is \b Fineness, ranging from 0 (coarse mesh,
low number of elements) to 1 (extremely fine mesh, great number of
elements).
+low number of segments) to 1 (extremely fine mesh, great number of
+segments).
\image html automaticlength.png
Compare one and the same object (sphere) meshed with
minimum and maximum value of this parameter.
\image html image147.gif "Example of a very rough mesh. Automatic Length works for 0."
+\image html image147.gif "Example of a rough mesh at Automatic Length Fineness of 0."
\image html image148.gif "Example of a very fine mesh. Automatic Length works for 1."
+\image html image148.gif "Example of a fine mesh at Automatic Length Fineness of 1."
\anchor fixed_points_1d_anchor
Fixed points 1D hypothesis
Fixed points 1D hypothesis allows splitting edges through a
set of points parameterized on the edge (from 1 to 0) and a number of segments for each
interval limited by the points.
+set of points parametrized on the edge (from 1 to 0) and a number of
+segments for each interval limited by the points.
\image html hypo_fixedpnt_dlg.png
@@ 293,7 +304,7 @@ possible to select the edges to be reversed either directly picking them in
the 3D viewer or selecting the edges or groups of edges in the
Object Browser.
\image html mesh_fixedpnt.png "Example of a submesh on the edge built using Fixed points 1D hypothesis"
+\image html mesh_fixedpnt.png "Example of a submesh on the edge built using Fixed points 1D hypothesis"
See Also a sample TUI Script of a
\ref tui_fixed_points "Defining Fixed Points" hypothesis operation.
diff git a/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc
index 05b8d5a..234ffd1 100644
 a/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc
+++ b/doc/salome/gui/SMESH/input/2d_meshing_hypo.doc
@@ 11,7 +11,7 @@
Max Element Area hypothesis is applied for meshing of faces
composing your geometrical object. Definition of this hypothesis
consists of setting the maximum area of mesh elements,
+consists of setting the maximum area of mesh faces,
which will compose the mesh of these faces.
\image html amaxelarea.png
@@ 26,9 +26,9 @@ which will compose the mesh of these faces.
\anchor length_from_edges_anchor
Length from Edges
Length from edges hypothesis builds 2D mesh elements having a
maximum linear size calculated as an average segment length for a wire
of a given face.
+Length from edges hypothesis defines maximum linear size of
+mesh faces as an average length of mesh edges approximating a boundary
+of a face being meshed.
See Also a sample TUI Script of a
\ref tui_length_from_edges "Length from Edges" hypothesis operation.
@@ 41,7 +41,7 @@ of a given face.
Quadrangle parameters is a hypothesis for Quadrangle (Mapping) algorithm.
Transition tab is used to define the algorithm of transition
between opposite sides of faces with a different number of
+between opposite sides of the face with a different number of
segments on them. The following types of transition
algorithms are available:
@@ 54,7 +54,7 @@ algorithms are available:
 Quadrangle preference forces building only quadrangles in the
transition area along the finer meshed sides. This hypothesis has a
restriction: the total quantity of segments on all
 four sides of the face must be even (divisible by 2).
+ four face sides must be even (divisible by 2).
\note This type corresponds to Quadrangle Preference additional hypothesis,
which is obsolete now.
 Quadrangle preference (reversed) works in the same way and
@@ 63,9 +63,9 @@ algorithms are available:
 Reduced type forces building only quadrangles and the transition
between the sides is made gradually, layer by layer. This type has
a limitation on the number of segments: one pair of opposite sides must have
 the same number of segments, the other pair must have an even difference
 between the numbers of segments on the sides. In addition, the number
 of rows between sides with different discretization
+ the same number of segments, the other pair must have an even total
+ number of segments. In addition, the number of rows
+ between sides with different discretization
should be enough for the transition. Following the fastest transition
pattern, three segments become one (see the image below), hence
the least number of face rows needed to reduce from Nmax segments
@@ 77,8 +77,8 @@ algorithms are available:
Base vertex tab allows using Quadrangle (Mapping)
algorithm for meshing of trilateral faces. In this case it is
necessary to select the vertex, which will be used as the fourth edge
(degenerated).
+necessary to select the vertex, which will be used as the forth
+degenerated side of quadrangle.
\image html hypo_quad_params_dialog_vert.png "Quadrangle parameters: Base Vertex"
diff git a/doc/salome/gui/SMESH/input/about_filters.doc b/doc/salome/gui/SMESH/input/about_filters.doc
index 22d8863..af52b4b 100644
 a/doc/salome/gui/SMESH/input/about_filters.doc
+++ b/doc/salome/gui/SMESH/input/about_filters.doc
@@ 7,7 +7,7 @@ specific condition or a set of conditions. Filters can be used to create
or edit mesh groups, remove elements from the mesh object, control
mesh quality by different parameters, etc.
Several filters can be combined together by using logical operators \a
+Several criteria can be combined together by using logical operators \a
AND and \a OR. In addition, applied filter criterion can be reverted
using logical operator \a NOT.
@@ 19,12 +19,12 @@ modes:
 In GUI, filters are available in some dialog boxes via an additional
"Set Filters" button, clicking on which opens the dialog box
allowing to specify the list of filter criterions to be applied to the
+allowing to specify the list of filter criteria to be applied to the
current selection. See \subpage selection_filter_library_page page to learn more
about selection filters and their usage in GUI.
 In Python scripts, filters can be used to choose only some mesh
 entities (nodes and/or elements) for the operations, which require the
+ entities (nodes or elements) for the operations, which require the
list of entities as input parameter (create/modify group, remove
nodes/elements, etc). The page \ref tui_filters_page provides
examples of the filters usage in Python scripts.
diff git a/doc/salome/gui/SMESH/input/about_hypo.doc b/doc/salome/gui/SMESH/input/about_hypo.doc
index 65d5c7a..3c38fb7 100644
 a/doc/salome/gui/SMESH/input/about_hypo.doc
+++ b/doc/salome/gui/SMESH/input/about_hypo.doc
@@ 3,12 +3,12 @@
\page about_hypo_page About Hypotheses
\b Hypotheses represent boundary conditions which will be taken into
account at calculations of meshes or submeshes.
These hypotheses allow you to manage the level of detail of
the resulting meshes or submeshes: when applying different hypotheses
+account by meshing algorithms.
+The hypotheses allow you to manage the level of detail of
+the resulting mesh: when applying different hypotheses
with different parameters you can preset the quantity or size of
elements which will compose your mesh. So, it will be possible to
generate a coarse or a more refined mesh or submesh.
+generate a coarse or a more refined mesh.
In \b MESH there are the following Basic Hypotheses:
@@ 20,10 +20,11 @@ In \b MESH there are the following Basic Hypotheses:
 \ref max_length_anchor "Max Size"
 \ref adaptive_1d_anchor "Adaptive"
 \ref arithmetic_1d_anchor "Arithmetic 1D"
 \ref geometric_1d_anchor "Geometric 1D"
+ \ref geometric_1d_anchor "Geometric Progression"
 \ref start_and_end_length_anchor "Start and end length"
 \ref deflection_1d_anchor "Deflection 1D"
 \ref automatic_length_anchor "Automatic Length"
+ \ref fixed_points_1d_anchor "Fixed points 1D"
\subpage a2d_meshing_hypo_page "2D Hypotheses" (for meshing of faces):
@@ 37,22 +38,17 @@ In \b MESH there are the following Basic Hypotheses:
There also exist
\subpage additional_hypo_page "Additional Hypotheses" used together
with other hypotheses:
+There also exist
+\subpage additional_hypo_page "Additional Hypotheses" that can be used together
+with main hypotheses:
 \ref propagation_anchor "Propagation of 1D Hypothesis on opposite edges"
 \ref propagofdistribution_anchor "Propagation of Node Distribution on Opposite Edges"
 \ref viscous_layers_anchor "Viscous layers"
 \ref quadratic_mesh_anchor "Quadratic mesh"
 \ref non_conform_allowed_anchor "Non conform mesh allowed"
 \ref quadrangle_preference_anchor "Quadrangle preference"
The choice of a hypothesis depends on:

 the algorithm, which will be selected for meshing of this geometrical object (shape)
 the geometrical object (shape) which will be meshed

+The choice of a hypothesis depends on the selected algorithm.
*/
diff git a/doc/salome/gui/SMESH/input/about_meshes.doc b/doc/salome/gui/SMESH/input/about_meshes.doc
index 65201ac..a69bd12 100644
 a/doc/salome/gui/SMESH/input/about_meshes.doc
+++ b/doc/salome/gui/SMESH/input/about_meshes.doc
@@ 2,66 +2,100 @@
\page about_meshes_page About meshes
\n \b MESH represents a discretization of a geometrical CAD model into
a set of entities with a simple topology.
+\n \b MESH represents a discrete approximation of a subset of the
+threedimensional space by \ref mesh_entities "elementary geometrical elements".
It is possible to \subpage constructing_meshes_page "construct meshes"
on the basis of geometrical shapes produced in the GEOM module.
Construction of \subpage constructing_submeshes_page "submeshes"
allows to mesh parts of the geometrical object, for example a face,
with different meshing parameters or using another meshing algorithm
than other parts.

3D mesh can be generated basing on a 2D closed mesh.

Several created meshes can be \subpage building_compounds_page "combined into another mesh".

The whole mesh or its part can be \subpage copy_mesh_page "copied" into another mesh.
+Mesh module provides several ways to create the mesh:
+
+  The main way is to \subpage constructing_meshes_page "construct the mesh"
+ on the basis of the geometrical shape produced in the Geometry
+ module. This way implies selection of
+  a geometrical object ( main shape) and
+  meshing parameters (\ref
+ basic_meshing_algos_page "meshing algorithms" and
+ characteristics (e.g. element size) of a
+ required mesh encapsulated in \ref about_hypo_page "hypothesis"
+ objects).
Meshing parameters of meshes and submeshes can be
\subpage editing_meshes_page "edited", then only the mesh part
depending on the changed parameters will be recomputed.
+ Construction of \subpage constructing_submeshes_page "submeshes"
+ allows to mesh some subshapes of the main shape, for example a face,
+ using different meshing parameters than other subshapes.
+ Meshing parameters of meshes and submeshes can be
+ \subpage editing_meshes_page "edited". (Upon edition only mesh entities
+ generated using changed meshing parameters are removed and will be
+ recomputed).
+ \note Algorithms and hypotheses used at mesh level are referred as
+ \a global ones and those used at submesh level are referred as \a
+ local ones.
+
+  Bottomup way, using \ref modifying_meshes_page "mesh modification"
+ operations, especially \ref extrusion_page "extrusion" and \ref
+ revolution_page "revolution". To create an empty mesh not based on
+ geometry, use the same dialog as to \ref constructing_meshes_page
+ "construct the mesh on geometry" but do not specify any geometry
+ nor meshing algorithm.
+
+  The mesh can be \ref importing_exporting_meshes_page "imported" from
+ (and exported to) the file in MED, UNV, STL, CGNS, DAT, GMF and
+ SAUVE formats.
+
+  The 3D mesh can be generated from the 2D mesh, \ref
+ importing_exporting_meshes_page "imported" or manually created. To
+ setup the meshing parameters of a mesh not based on geometry, just
+ invoke \ref editing_meshes_page "Edit mesh / submesh" command on
+ your 3D mesh.
+
+  Several meshes can be \subpage building_compounds_page "combined"
+ into a new mesh.
+
+  The whole mesh or its part (submesh or group) can be
+ \subpage copy_mesh_page "copied" into a new mesh.
+
+
Meshes can be edited using the MESH functions destined for
\ref modifying_meshes_page "modification" of generated meshes.
+\ref modifying_meshes_page "modification" of meshes.
Meshes are stored in DAT, MED, UNV, STL, CGNS, GMF and SAUVE formats and can be
\subpage importing_exporting_meshes_page "imported from and exported to"
 the file in these formats.
The \b topology of a mesh is described by the relationships between its
entities including:
+The \b structure of a SALOME mesh is described by nodes and elements based on
+these nodes. Geometry of the element is defined by the sequence of
+nodes constituting it and
+the
+ connectivity convention (adopted from MED library). Definition of
+the element basing on elements of lower dimension is NOT supported.
+\anchor mesh_entities
+The mesh can include the following entities:
 \b Node — 0D object of a mesh presented by a point with coordinates (x, y, z).
+ \b Node — an entity of a mesh defining a position in 3D
+ space with coordinates (x, y, z).
+ \b Edge (or segment) — 1D element of a mesh linking two nodes.
+ \b Face — 2D element of a mesh representing a part of
+ surface bound by links between face nodes. A face can be a
+ triangle, quadrangle or polygon.
+ \b Volume — 3D element of a mesh representing a part of 3D
+ space bound by volume facets. Nodes of a volume describing each
+ facet are defined by
+ the
+ MED connectivity convention. A volume can be a tetrahedron, hexahedron,
+ pentahedron, pyramid, hexagonal prism or polyhedron.
 \b 0D element — element of a mesh defined by one node.
 \b Edge — 1D element of a mesh defined by two nodes.
 \b Face — 2D element of a mesh defined by three or four edges (closed contour).
 \b Volume — 3D element of a mesh defined by several faces.
 \b Ball element — discrete element of a mesh defined by a node and a diameter.
+ \b Ball element — discrete element of a mesh defined by a
+ node and a diameter.
 These entities are
considered as topological entities and they don't
imply any geometric representation. Only \b Nodes reference geometric
representations of points with definite coordinates. The node entity
contains additional information about its position in the space
and its relations with the meshed CAD model. Its position could be
described in the following way:
+Every mesh entity has an attribute associating it to a subshape it is
+generated on (if any). The node generated on the geometrical edge or
+surface in addition stores its position in parametric space of the
+associated geometrical entity.

 3D position. It characterizes the position of a node in a
 solid geometry and is defined by three coordinates x,y and z and a
 reference to the solid geometrical entity.
 Surface position. It characterizes the position of a node on a
 geometric surface and is defined by the u,v position in the parametric
 space of the corresponding surface.
 Line position. It characterizes the position of a node on a
 geometric curve and is defined by the u parameter and the
 corresponding curve.
 Vertex position. It characterizes the position of a node on a
 geometric point of the meshed CAD model and is defined by the x,y,z
 coordinates of the corresponding vertex.

+SALOME supports elements of second order, without central node
+(quadratic triangle, quadrangle, tetrahedron, hexahedron, pentahedron
+and pyramid) and with central nodes (biquadratic triangle and
+quadrangle and triquadratic hexahedron).
+Quadratic mesh can be obtained in two ways:
+ Using a global \ref quadratic_mesh_anchor "Quadratic Mesh"
+hypothesis. (Elements with the central node are not generated in this way).
+ Using \ref convert_to_from_quadratic_mesh_page operation.
*/
diff git a/doc/salome/gui/SMESH/input/additional_hypo.doc b/doc/salome/gui/SMESH/input/additional_hypo.doc
index 9b732a0..9bade21 100644
 a/doc/salome/gui/SMESH/input/additional_hypo.doc
+++ b/doc/salome/gui/SMESH/input/additional_hypo.doc
@@ 5,37 +5,44 @@
\n Additional Hypotheses can be applied as a supplement to the
main hypotheses, introducing additional concepts to mesh creation.
To define an Additional Hypothesis simply select it in
Create Mesh menu. These hypotheses are actually changes in the
rules of mesh creation and as such don't possess adjustable values.

\anchor non_conform_allowed_anchor
Non Conform mesh allowed hypothesis

Non Conform mesh allowed hypothesis allows to generate nonconform
meshes (that is, meshes having some edges ending on an edge or face of
adjacent elements).

\anchor quadratic_mesh_anchor
Quadratic Mesh

Quadratic Mesh hypothesis allows to build a quadratic mesh (whose
edges are not straight but curved lines and can be defined by three
points: first, middle and last instead of an ordinary two).
+An Additional Hypothesis can be defined in the same way as any
+main hypothesis in \ref create_mesh_anchor "Create Mesh" or
+\ref constructing_submeshes_page "Create SubMesh" dialog.
+
+The following additional hypothesis are available:
+
+ \ref propagation_anchor "Propagation of 1D Hypothesis on opposite edges"
+ and \ref propagofdistribution_anchor "Propagation of Node Distribution on Opposite Edges"
+ hypotheses are useful for creation of quadrangle and hexahedral
+ meshes.
+ \ref viscous_layers_anchor "Viscous Layers" and
+ \ref viscous_layers_anchor "Viscous Layers 2D"
+ hypotheses allow creation of layers of highly stretched
+ elements near mesh boundary, which is beneficial for high quality
+ viscous computations.
+ \ref quadratic_mesh_anchor "Quadratic Mesh" hypothesis allows
+ generation of second order meshes.
+ \ref quadrangle_preference_anchor "Quadrangle Preference"
+ enables generation of quadrangles.
+
See \ref adding_quadratic_elements_page
for more information about quadratic meshes.
\anchor propagation_anchor
Propagation of 1D Hypothesis on opposite edges
Propagation of 1D Hypothesis on opposite edges allows to propagate a
hypothesis onto an opposite edge. If a local hypothesis and
propagation are defined on an edge of a quadrangular face, the
opposite edge will have the same hypothesis, unless another hypothesis
has been locally defined on the opposite edge.


See Also a sample TUI Script of a
+Propagation of 1D Hypothesis on opposite edges allows to mesh
+opposite sides of a quadrangle face, and of other adjacent quadrangles,
+using the same hypothesis assigned to one edge only.
+Thus you define a submesh on an edge where you define 1D meshing
+parameters and a \b Propagation hypothesis. These local meshing
+parameters will be propagated via opposite sides of quadrangles to the
+whole geometry, or till an edge with other local meshing parameters.
+
+This hypothesis can be taken into account by
+\ref a1d_algos_anchor "Wire Discretization" and
+\ref a1d_algos_anchor "Composite Side Discretization" algorithms.
+
+See Also a sample TUI Script of a
\ref tui_propagation "Propagation hypothesis" operation
\anchor propagofdistribution_anchor
@@ 48,25 +55,18 @@ opposite edge will have the same number of nodes and the same
relations between segment lengths, unless another hypothesis
has been locally defined on the opposite edge.

See Also a sample TUI Script of a
\ref tui_propagation "Propagation hypothesis" operation

\anchor quadrangle_preference_anchor
Quadrangle Preference
+This hypothesis can be taken into account by
+\ref a1d_algos_anchor "Wire Discretization" and
+\ref a1d_algos_anchor "Composite Side Discretization" algorithms.
This additional hypothesis can be used together with 2D triangulation algorithms.
It allows 2D triangulation algorithms to build quadrangular meshes.

When used with "Quadrangle (Mapping)" meshing algorithm, that is obsolete
 since introducing \ref hypo_quad_params_anchor "Quadrangle parameters"
hypothesis, this hypothesis has one restriction on its work: the total quantity of
segments on all four sides of the face must be even (divisible by 2).
+See Also a sample TUI Script of a
+\ref tui_propagation "Propagation hypothesis" operation
\anchor viscous_layers_anchor
Viscous Layers and Viscous Layers 2D
Viscous Layers and Viscous Layers 2D additional
hypotheses can be used together with either some 3D algorithms, for example
+hypotheses can be used by several 3D algorithms, for example
Hexahedron(i,j,k), or 2D algorithms, for example Triangle
(MEFISTO), correspondingly. These hypotheses allow creation of layers
of highly stretched elements, prisms in 3D and quadrilaterals in 2D,
@@ 144,4 +144,33 @@ computations.
See also a sample TUI script of a \ref tui_viscous_layers
"Viscous layers construction".
+
+\anchor quadratic_mesh_anchor
+Quadratic Mesh
+
+Quadratic Mesh hypothesis allows to build a quadratic mesh (in which
+links between element nodes are not straight but curved lines due to
+presence of an additional midside node).
+
+This 1D hypothesis can be taken into account by
+\ref a1d_algos_anchor "Wire Discretization" and
+\ref a1d_algos_anchor "Composite Side Discretization" algorithms. To
+make a quadratic mesh assign this hypothesis at
+\ref constructing_meshes_page "mesh construction".
+
+See \ref adding_quadratic_elements_page
+for more information about quadratic meshes.
+
+
+\anchor quadrangle_preference_anchor
+Quadrangle Preference
+
+This additional hypothesis can be used together with 2D triangulation algorithms.
+It allows 2D triangulation algorithms to build quadrangular meshes.
+
+When used with "Quadrangle (Mapping)" meshing algorithm, that is obsolete
+ since introducing \ref hypo_quad_params_anchor "Quadrangle parameters"
+hypothesis, this hypothesis has one restriction on its work: the total quantity of
+segments on all four sides of the face must be even (divisible by 2).
+
*/
diff git a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc
index b92148c..bdf730b 100644
 a/doc/salome/gui/SMESH/input/basic_meshing_algos.doc
+++ b/doc/salome/gui/SMESH/input/basic_meshing_algos.doc
@@ 3,27 +3,33 @@
\page basic_meshing_algos_page Basic meshing algorithms
\n The MESH module contains a set of meshing algorithms, which are
used for meshing entities (1D, 2D, 3D) composing geometrical objects.
+used for meshing entities (1D, 2D, 3D subshapes) composing
+geometrical objects.
+
+An algorithm represents either an implementation of a certain meshing
+technique or a interface to a whole meshing program generating elements
+of several dimensions.
 For meshing of 1D entities (edges):

+\anchor a1d_algos_anchor
 Wire Discretization meshing algorithm  splits an edge into a
number of mesh segments following an 1D hypothesis.
 Composite Side Discretization algorithm  allows to apply an 1D
hypothesis to a whole side of a geometrical face even if it is
composed of several edges provided that they form C1 curve, have the
same hypotheses assigned and form one side in all faces of the main
shape of a mesh.
+ Wire Discretization meshing algorithm  splits an edge into a
+number of mesh segments following an 1D hypothesis.
+
+ Composite Side Discretization algorithm  allows to apply an 1D
+ hypothesis to a whole side of a geometrical face even if it is
+ composed of several edges provided that they form C1 curve and form
+ one side in all faces of the main shape.
 For meshing of 2D entities (faces):
 Triangle meshing algorithms (Mefisto)  Faces are split into triangular elements.
 Quadrangle meshing algorithm (Mapping)  quadrilateral Faces are split into
quadrangular elements.
+ Triangle (Mefisto) meshing algorithm  splits faces
+ into triangular elements.
+ Quadrangle (Mapping) meshing algorithm  splits faces
+ into quadrangular elements.
\image html image123.gif "Example of a triangular 2D mesh"
@@ 33,12 +39,12 @@ quadrangular elements.
 For meshing of 3D entities (solid objects):
 Hexahedron meshing algorithm (i,j,k)  6sided Solids are split into
hexahedral (cubic) elements.
 \subpage cartesian_algo_page
 internal parts of Solids are split into hexahedral elements forming a
Cartesian grid; polyhedra and other types of elements are generated
where the geometrical boundary intersects Cartesian cells.
+ Hexahedron (i,j,k)meshing algorithm  6sided solids are
+ split into hexahedral (cuboid) elements.
+ \subpage cartesian_algo_page "Body Fitting" meshing
+ algorithm  solids are split into hexahedral elements forming
+ a Cartesian grid; polyhedra and other types of elements are generated
+ where the geometrical boundary intersects Cartesian cells.
\image html image125.gif "Example of a tetrahedral 3D mesh"
@@ 47,8 +53,8 @@ where the geometrical boundary intersects Cartesian cells.
Some 3D meshing algorithms, such as Hexahedron(i,j,k) and some
commercial ones, also can generate 3D meshes from 2D meshes, working without
geometrical objects.
+commercial ones, also can generate 3D meshes from 2D meshes, working
+without geometrical objects.
There is also a number of more specific algorithms:
diff git a/doc/salome/gui/SMESH/input/building_compounds.doc b/doc/salome/gui/SMESH/input/building_compounds.doc
index 98a20c4..8a89df1 100644
 a/doc/salome/gui/SMESH/input/building_compounds.doc
+++ b/doc/salome/gui/SMESH/input/building_compounds.doc
@@ 2,13 +2,16 @@
\page building_compounds_page Building Compounds
\n Compound Mesh is a combination of several meshes.
+\n Compound Mesh is a combination of several meshes. All elements and
+groups present in input meshes are present in the compound
+mesh. Neither geometry nor hypotheses of initial meshes are used by
+the compound mesh.
To Build a compound:
\par
From the \b Mesh menu select Build Compound or click "Build
Compound Mesh" button in the toolbar.
+ Compound Mesh" button in the toolbar.
\image html image161.png
"Build Compound Mesh" button
@@ 20,33 +23,33 @@ The following dialog box will appear:
\par
 \b Name  allows selecting the name of the resulting \b Compound.
 \b Meshes  allows selecting the meshes which will be
concatenated. They can be chosen in the Object Browser while holding
+
 \b Name  allows selecting the name of the resulting \b Compound mesh.
+  \b Meshes  allows selecting the meshes which will be
+ concatenated. They can be chosen in the Object Browser while holding
\b Ctrl button.
 Processing identical groups  allows selecting the method
of processing the namesake existing on the united meshes.
+
 Processing identical groups  allows selecting the method
+ of processing the namesake groups existing in the united meshes.
\n They can be either

 \b United  all elements of Group1 on Mesh_1 and Group1 on Mesh_2
become the elements of Group1 on the Compound_Mesh, or
 \b Renamed  Group1 on Mesh_1 becomes Group1_1 and Group1 on Mesh_2
becomes Group1_2. See \ref grouping_elements_page "Creating Groups"
for more information about groups.

 Create common groups for initial meshes checkbox permits to
automatically create groups of all elements of the same type
(nodes, edges, faces and volumes) for the resulting mesh from the
elements
of the initial meshes.

 You can simply unite meshes or choose to Merge coincident nodes
and elements, in which case it is possible to define the \b Tolerance
for this operation.
+
+  \b United  all elements of Group1 of Mesh_1 and Group1 of Mesh_2
+ become the elements of Group1 of the Compound_Mesh, or
+  \b Renamed  Group1 of Mesh_1 becomes Group1_1 and Group1 of Mesh_2
+ becomes Group1_2.
+
+ See \ref grouping_elements_page "Creating Groups" for more information
+ about groups.
+  Create common groups for initial meshes checkbox permits to
+ automatically create groups corresponding to every initial mesh.
+
+  You can choose to additionally
+ \ref merging_nodes_page "Merge coincident nodes"
+ \ref merging_elements_page "and elements" in the compound mesh, in
+ which case it is possible to define the \b Tolerance for this
+ operation.
\image html image160.gif "Example of a compound of two meshed cubes"
See Also a sample
+See Also a sample
\ref tui_building_compound "TUI Example of building compounds."
*/
diff git a/doc/salome/gui/SMESH/input/constructing_meshes.doc b/doc/salome/gui/SMESH/input/constructing_meshes.doc
index 5d65f4e..4e8d606 100644
 a/doc/salome/gui/SMESH/input/constructing_meshes.doc
+++ b/doc/salome/gui/SMESH/input/constructing_meshes.doc
@@ 2,14 +2,67 @@
\page constructing_meshes_page Constructing meshes
\n Construction of a mesh on some geometry consists of:
+To create a mesh on geometry, at first you create a mesh object by choosing
+ a geometrical shape produced in the Geometry module (main shape);
+ meshing parameters, including
+  \ref basic_meshing_algos_page "meshing algorithms" and
+  \ref about_hypo_page "hypotheses" specifying constraints to be
+ taken into account by chosen meshing algorithms.
+
+Then you already can launch mesh generation by invoking \ref
+compute_anchor "Compute" command.
+
+\note Sometimes \a hypotheses term is used to refer to both algorithms
+and hypotheses.
+
+Generation of the mesh on the geometry is performed in the bottomup
+flow: nodes on vertices are created first, then edges are divided into
+segments using nodes on vertices; the segments of the edges is then
+used while meshing faces; then the mesh of the faces is used while meshing
+solids. This automatically assures the conformity of the mesh.
+
+You are to choose a meshing algorithm for every dimension of
+subshapes up to the highest dimension you desire to generate. Note
+that some algorithms generate elements of several dimensions while
+others, of only one. But it's not necessary to define meshing
+parameters for all dimensions at once; you can start from 1D
+meshing parameters only, compute the 1D mesh, then define 2D meshing
+parameters and compute the 2D mesh (note that 1D mesh won't be
+recomputed).
+
+An algorithm of a certain dimension chosen at mesh creation is applied
+to discretize every subshape of this dimension. But you can
+specify a different algorithm or hypothesis to be applied to one or
+a group of subshapes by creating a \ref constructing_submeshes_page
+"submesh". You can specify no algorithms at all at mesh object
+creation and specify the meshing parameters on submeshes only; then
+only subshapes for which you defined an algorithm and a needed
+hypothesis (if any) will be discretized.
+
+\n Construction of a mesh on some geometry includes at least two (mesh
+creation and computing) of the following steps:
  \ref create_mesh_anchor "Creating of a mesh object"
  \ref evaluate_anchor "Evaluating mesh size" (optional)
  \ref preview_anchor "Previewing the mesh" (optional)
  \ref submesh_order_anchor "Changing submesh priority" (optional)
  \ref compute_anchor "Computing the mesh"
  \ref edit_anchor "Editing the mesh" (optional)
+  \ref create_mesh_anchor "Creation of a mesh object" where you
+ can specify meshing parameters to apply to all subshapes of the
+ main shape.
+  \ref constructing_submeshes_page "Creation of submeshes"
+ (optional) where you can specify meshing parameters to apply to
+ selected subshapes.
+  \ref evaluate_anchor "Evaluating mesh size" (optional) can be
+ used to know approximate number of elements before actual generation
+ of them.
+  \ref preview_anchor "Previewing the mesh" (optional) can be
+ used to generate mesh of only lower dimension(s) in order to
+ visually estimate it before full mesh generation, which can be much
+ longer.
+  \ref submesh_order_anchor "Changing submesh priority"
+ (optional) can be useful if there are concurrent submeshes
+ defined.
+  \ref compute_anchor "Computing the mesh" uses defined meshing
+ parameters to generate mesh elements.
+  \ref edit_anchor "Editing the mesh" (optional) can be used to
+ \ref modifying_meshes_page "modify" mesh of lower dimension before
+ \ref compute_anchor "computing" elements of upper dimension.
\anchor create_mesh_anchor
@@ 44,41 +97,48 @@
"Create mesh" dialog box contains several tab pages titled \b 3D,
\b 2D, \b 1D and \b 0D. The title of each page reflects the
 dimension of the CAD model (geometry) the algorithms listed on
+ dimension of the subshapes the algorithms listed on
this page affect and the maximal dimension of elements the algorithms
generate. For example, \b 3D page lists the algorithms that affect
 3D geometrical objects (solids) and generate 3D mesh elements
+ 3D subshapes (solids) and generate 3D mesh elements
(tetrahedra, hexahedra etc.)
+ As soon as you have selected an algorithm, you can create (or
+ select already created) a hypothesis. A set of accessible
+ hypotheses includes only hypotheses the selected algorithm can take
+ into account.
+
\note
  Some page(s) can be disabled if the source geometrical
+  Some page(s) can be disabled if the geometrical
object does not include shapes (subshapes) of the corresponding
dimension(s). For example, if the input object is a geometrical face,
\b 3D page is disabled.
 Some algorithms affect the geometry of several dimensions,
 i.e. "1D2D" or "1D2D3D". If such an algorithm is selected by the
 user, the dialog box pages related to the corresponding lower level
 dimensions are disabled.
+ i.e. 1D+2D or 1D+2D+3D. If such an algorithm is selected, the
+ dialog box pages related to the corresponding lower dimensions are
+ disabled.
 \b 0D page does not refer to the 0D elements, but to 0D
geometry (vertices). Mesh module does not provide algorithms that
produce 0D elements. Currently \b 0D page provides only one
 algorithm "Segments around vertex" that allows specyfying the required
+ algorithm "Segments around vertex" that allows specifying the required
size of mesh edges about the selected vertex (or vertices).
For example, you need to mesh a 3D object.
 First, type the name of your mesh in the \b Name box, by default,
 it is "Mesh_1". Then select the geometrical object you wish to
 mesh in the Object Browser and click "Select" button near \b Geometry
 field (if the name of the object has not yet appeared in \b Geometry field).
+ First, you can change a default name of your mesh in the \b Name
+ box. Then check that a selected geometrical object, whose name is
+ shown in \b Geometry field, is that you wish to mesh; if not, click
+ the right object in the Object Browser. Click "Select" button
+ near \b Geometry field if the name of the object has not yet
+ appeared in \b Geometry field.
\image html image120.png
"Select" button
Now you can define 3D Algorithm and 3D Hypotheses, which will be
 applied to the solids of your geometrical object. Click the "Add
 Hypothesis" button to add a hypothesis.
+ applied to discretize the solids of your geometrical object using
+ 3D elements. Click the "Add Hypothesis" button to add a hypothesis.
\image html image121.png
"Add Hypothesis" button
@@ 117,8 +177,8 @@
choice of hypotheses and lower dimension algorithms depends on
the higher dimension algorithm.
 If you wish you can select different algorithms and/or hypotheses
 for meshing some parts of your CAD model by \ref constructing_submeshes_page.
+ If you wish you can select other algorithms and/or hypotheses
+ for meshing some subshapes of your CAD model by \ref constructing_submeshes_page.
Some algorithms generate mesh of several dimensions, while others
produce mesh of only one dimension. In the latter case there must
@@ 141,30 +201,35 @@
 a reference to the geometrical object on the basis of
which the mesh has been constructed (\a mechanic);
 Applied hypotheses folder containing the references
 to the hypotheses applied at the construction of the mesh;
+ to the hypotheses chosen at the construction of the mesh;
 Applied algorithms folder containing the references
 to the algorithms applied at the construction of the mesh.
+ to the algorithms chosen at the construction of the mesh.
There is an alternative way to assign Algorithms and Hypotheses by
clicking Assign a set of hypotheses button and selecting among
 predefined sets of hypotheses. In addition to the standard
+ predefined sets of algorithms and hypotheses. In addition to the builtin
sets of hypotheses, it is possible to create custom sets by editing
CustomMeshers.xml file located in the home directory. CustomMeshers.xml
file must describe sets of hypotheses in the
same way as ${SMESH_ROOT_DIR}/share/salome/resources/smesh/StdMeshers.xml
file does (sets of hypotheses are enclosed between
tags).

+
+
\image html hypo_sets.png
List of sets of hypotheses. Tag [custom] is
automatically added to the sets defined by the user.

 \note \a "Automatic" in the names of predefined sets of
 hypotheses came from previous versions of SALOME where
 \ref automatic_length_anchor "Automatic Length" hypothesis
 was included in these sets, and not that these sets are suitable for
 meshing any geometry.
+
+
+ \note
+  \a "Automatic" in the names of predefined sets of
+ hypotheses came from previous versions of SALOME where
+ \ref automatic_length_anchor "Automatic Length" hypothesis
+ was included in these sets, and not that these sets are suitable for
+ meshing any geometry.
+  The list of sets of hypotheses can be shorter than in the
+ above image depending on the geometry dimension.
@@ 222,31 +287,31 @@ it is possible to change the priority of their computation, i.e. to
change the priority of applying algorithms to the shared subshapes of
the Mesh shape.
To change submesh priority:
+To change submesh priority:
Choose "Change submesh priority" from the Mesh menu or a popup
menu. The opened dialog shows a list of submeshes in the order of
+Choose "Change submesh priority" from the Mesh menu or a popup
+menu. The opened dialog shows a list of submeshes in the order of
their priority.
There is an example of submesh order modifications taking a Mesh created on a Box
+There is an example of submesh order modifications taking a Mesh created on a Box
shape. The main Mesh object:
 1D Wire discretisation with Number of Segments=20
 2D Triangle (Mefisto) with HypothesisMax Element Area
The first submesh object Submesh_1 created on Face_1 is:
+The first submesh Submesh_1 created on Face_1 is:
 1D Wire discretisation with Number of Segments=4
 2D Triangle (Mefisto) with Hypothesis MaxElementArea=1200
The second submesh object Submesh_2 created on Face_2 is:
+The second submesh Submesh_2 created on Face_2 is:
 1D Wire discretisation with Number of Segments=8
 2D Triangle (Mefisto) with Hypothesis MaxElementArea=1200
And the last submesh object Submesh_3 created on Face_3 is:
+And the last submesh Submesh_3 created on Face_3 is:
 1D Wire discretisation with Number of Segments=12
 2D Triangle (Mefisto) with Hypothesis MaxElementArea=1200
@@ 254,7 +319,7 @@ And the last submesh object Submesh_3 created on Face_3 is:
The submeshes become concurrent if they share subshapes that can be
meshed with different algorithms (or different hypotheses). In the
example, we have three submeshes with concurrent algorithms, because
+example, we have three submeshes with concurrent algorithms, because
they have different hypotheses.
The first mesh computation is made with:
@@ 284,15 +349,15 @@ As we can see, each mesh computation has a different number of result
elements and a different mesh discretization on the shared edges (the edges
that are shared between Face_1, Face_2 and Face_3)
Additionally, submesh priority (the order of applied algorithms) can
+Additionally, submesh priority (the order of applied algorithms) can
be modified not only in a separate dialog box, but also in
the Preview. This helps to preview different mesh results,
modifying the order of submeshes.
+modifying the order of submeshes.
\image html mesh_order_preview.png
"Preview with submesh priority list box"
+"Preview with submesh priority list box"
If there are no concurrent submeshes under the Mesh object, the user
+If there are no concurrent submeshes under the Mesh object, the user
will see the following information.
\image html mesh_order_no_concurrent.png
@@ 315,7 +380,7 @@ click "Compute" button of the toolbar.
After the mesh computation finishes, the Mesh Computation information
box appears. If you close this box and click "Compute" button again,
without previously changing hypotheses and/or algorithms, the mesh is
+without previously changing meshing parameters, the mesh is
NOT recomputed and the Mesh Computation information box with
the same contents is shown. (To fully recompute the mesh, invoke \ref
clear_mesh_anchor "Clear Mesh Data" command before).
@@ 325,12 +390,13 @@ of different types in the mesh.
\image html meshcomputationsucceed.png
+\anchor meshing_failed_anchor
If the mesh computation failed, the information about the cause of the
failure is provided in \b Errors table.
\image html meshcomputationfail.png
After you select the error, Show Subshape button allows
+After you select an error, Show Subshape button allows
visualizing in magenta the geometrical entity that causes the error.
\image html failed_computation.png
@@ 338,8 +404,8 @@ visualizing in magenta the geometrical entity that causes the error.
Subshape button
Publish Subshape button publishes the subshape, whose meshing
has failed, in GEOM component as a child of the mesh geometry, which
allows analyzing the problem geometry and creating a submesh on it in
+has failed, in the Geometry component as a child of the main shape, which
+allows analyzing the problematic geometry and creating a submesh on it in
order to locally tune the hypotheses.
If the failure is caused by an invalid input mesh and the algorithm has
diff git a/doc/salome/gui/SMESH/input/constructing_submeshes.doc b/doc/salome/gui/SMESH/input/constructing_submeshes.doc
index d88161c..cf276a5 100644
 a/doc/salome/gui/SMESH/input/constructing_submeshes.doc
+++ b/doc/salome/gui/SMESH/input/constructing_submeshes.doc
@@ 2,13 +2,20 @@
\page constructing_submeshes_page Constructing submeshes
Submesh is a mesh on a geometrical subobject (subshape) used to assign
different meshing algorithms and/or hypotheses than the algorithms and
hypotheses assigned to the parent mesh on the parent geometrical
object, that allows getting a local mesh refinement.
+By purpose, the submesh is an object used to assign to a subshape
+different meshing parameters than those assigned to the main shape.
A subshape to create a submesh on should be retrieved from the shape
of the parent mesh in one of the following ways:
+Structurally, the submesh is a mesh on a certain subshape, or a group of
+subshapes, possibly generated using different meshing algorithms
+and/or hypotheses than those used to generate the mesh on other
+subshapes.
+
+Creation of a submesh allows to control individually meshing of a
+certain subshape, thus allowing to get mesh locally coarser or finer, to get
+elements of different types in the same mesh etc.
+
+A subshape to create a submesh on should be retrieved from the main shape
+in one of the following ways:
 In Geometry module, via New Entity > Explode menu.
 In Geometry module, by creation of a group (New Entity >
Group > Create Group menu).
@@ 16,33 +23,55 @@ of the parent mesh in one of the following ways:
\ref subshape_by_mesh_elem "selecting a mesh element" generated on a
subshape of interest. This way is accessible if the mesh is
already computed.
+ In Mesh module, by clicking Publish Subshape button in a
+ dialog showing \ref meshing_failed_anchor "meshing errors".
+
+
+Internally, definition of meshing parameters to apply for
+discretization of a certain subshape, for example an edge of a
+compound of solids, starts from searching an algorithm, 1D as for the
+edge. The following subshapes are sequentially checked for presence
+of a submesh where 1D algorithm is assigned:
+
+ the \b edge itself
+ groups of edges containing the edge, if any
+ \b wires sharing the edge
+ \b faces sharing the edge
+ groups of faces sharing the edge, if any
+ \b shells sharing the edge
+ \b solids sharing the edge
+ groups of solids sharing the edge, if any
+ the main shape
+(This sequence of subshapes defines priority of submeshes. Thus more
+local, i.e. assigned to subshape of lower dimension, algorithms and
+hypotheses have higher priority during the search of hypotheses to
+apply.)
+
+As soon as an 1D algorithm is found the search stops and the same
+sequence of subshapes is checked to find a main and additional 1D
+hypotheses the found 1D algorithm can take into account.
+
+The multidimensional algorithms have higher priority than
+unidimensional algorithms if they are assigned to submeshes of the
+same priority.
+
+If meshing parameters are defined on submeshes of the same priority,
+for example different 1D hypotheses are assigned to two faces sharing
+an edge, an arbitrary algorithm/hypothesis will be used for
+meshing. This indeterminacy can be fixed by
+\ref submesh_order_anchor "Changing" mutual priority of such
+concurrent submeshes.
If a geometrical subobject belongs to several geometrical objects
having different meshes or submeshes, it will be meshed with the
hypotheses of a submesh of a lower dimension.
For example, a face of a box is meshed with a submesh using algorithms
and hypotheses other than the parent mesh on the whole box. The face
and the box share four edges, which will be meshed with algorithms and
hypotheses of the submesh on the face, because the face is a 2D object
while the box is a 3D object.
 If the dimensions are the same, an arbitrary algorithm/hypothesis
 will be used. This means that an edge shared by two faces each having
 its own different submesh, will be meshed using algorithms and
 hypotheses of any of the two, chosen randomly. This indeterminacy can
 be fixed by defining \ref submesh_order_anchor "Submesh priority". The
 default submeshes priority is such that multidimensional algorithms
 are processed first.

\n Construction of a submesh consists of:
 Selecting a mesh which will encapsulate your submesh
 Selecting a geometrical object for meshing
 Applying one or several previously described
+
 Selecting a subshape for meshing
+ Applying one or several
\ref about_hypo_page "hypotheses" and
\ref basic_meshing_algos_page "meshing algorithms" which will be used
at computation of this submesh
+for discretization of this subshape.
To construct a submesh:
@@ 64,8 +93,8 @@ The following dialog box will appear:
\par
It allows to define the \b Name, the parent \b Mesh and the \b
Geometry (e.g. a face if the parent mesh has been built on box) of the
submesh. You can select meshing algorithms and hypotheses in the same way as
in \ref constructing_meshes_page "Create mesh" menu.
+submesh. You can define meshing algorithms and hypotheses in the same way as
+in \ref constructing_meshes_page "Create mesh" dialog.
\par
\anchor subshape_by_mesh_elem
diff git a/doc/salome/gui/SMESH/input/index.doc b/doc/salome/gui/SMESH/input/index.doc
index d7a4751..48047a2 100644
 a/doc/salome/gui/SMESH/input/index.doc
+++ b/doc/salome/gui/SMESH/input/index.doc
@@ 4,24 +4,34 @@
\image html aviewgeneral.png
\n \b MESH module of SALOME is destined for:
+\n \b Mesh module of SALOME is destined for:
 \subpage about_meshes_page "meshing geometrical models"
previously created or imported by the Geometry component;
+ \subpage about_meshes_page "creating meshes" in different ways:
+  by meshing geometrical models previously created or imported by the
+ Geometry component;
+  bottomup, using \ref modifying_meshes_page "mesh edition"
+ operations, especially \ref extrusion_page "extrusion" and \ref
+ revolution_page "revolution";
+  by generation of the 3D mesh from the 2D mesh (the latter can be
+ either \ref importing_exporting_meshes_page "imported" or manually
+ created);
+
 \ref importing_exporting_meshes_page "import and export of meshes in various formats";
 \subpage viewing_meshes_overview_page "viewing created meshes" in
the VTK viewer;
+ \subpage modifying_meshes_page "modifying meshes" with a vast
+ array of dedicated operations;
 \subpage grouping_elements_page "creating groups of mesh elements";
+ filtering mesh entities (nodes or elements) using
+ \subpage filters_page "Filters" functionality for \ref
+ grouping_elements_page "creating groups" and applying \ref
+ modifying_meshes_page "mesh modifications";
+ \subpage viewing_meshes_overview_page "viewing meshes" in
+ the VTK viewer;
 applying to meshes \subpage quality_page "Quality Controls",
allowing to highlight important elements;

 filtering subsets of mesh entities (nodes elements) using
\subpage filters_page "Filters" functionality;
 \subpage modifying_meshes_page "modifying meshes" with a vast
array of dedicated operations;
+ allowing to highlight important elements;
 various \subpage measurements_page "measurements" of the mesh objects.
It is possible to easily set parameters via the variables predefined in
+When setting parameters of operations, it is possible to use the variables predefined in
\subpage using_notebook_mesh_page "Salome notebook".
Mesh module preferences are described in the \subpage mesh_preferences_page section of SALOME Mesh Help.
diff git a/src/SMESH/SMESH_Mesh.cxx b/src/SMESH/SMESH_Mesh.cxx
index 243de2f..7c70d5f 100644
 a/src/SMESH/SMESH_Mesh.cxx
+++ b/src/SMESH/SMESH_Mesh.cxx
@@ 1870,6 +1870,18 @@ int SMESH_Mesh::NbSubMesh() const throw(SALOME_Exception)
return _myMeshDS>NbSubMesh();
}
+//================================================================================
+/*!
+ * \brief Returns number of meshes in the Study, that is supposed to be
+ * equal to SMESHDS_Document::NbMeshes()
+ */
+//================================================================================
+
+int SMESH_Mesh::NbMeshes() const // nb meshes in the Study
+{
+ return _myDocument>NbMeshes();
+}
+
//=======================================================================
//function : IsNotConformAllowed
//purpose : check if a hypothesis alowing notconform mesh is present
diff git a/src/SMESH/SMESH_Mesh.hxx b/src/SMESH/SMESH_Mesh.hxx
index d399767..d8ac1f2 100644
 a/src/SMESH/SMESH_Mesh.hxx
+++ b/src/SMESH/SMESH_Mesh.hxx
@@ 295,6 +295,8 @@ class SMESH_EXPORT SMESH_Mesh
int NbGroup() const { return _mapGroup.size(); }
+ int NbMeshes() const; // nb meshes in the Study
+
SMESH_Group* AddGroup (const SMDSAbs_ElementType theType,
const char* theName,
int& theId,
@@ 353,7 +355,6 @@ protected:
int _groupId; // id generator for group objects
int _nbSubShapes; // initial nb of subshapes in the shape to mesh
bool _isShapeToMesh;// set to true when a shape is given (only once)
 //std::list _subMeshesUsingHypothesisList;
SMESHDS_Document * _myDocument;
SMESHDS_Mesh * _myMeshDS;
SMESH_Gen * _gen;
diff git a/src/SMESH/SMESH_subMesh.hxx b/src/SMESH/SMESH_subMesh.hxx
index 41b1334..4d40803 100644
 a/src/SMESH/SMESH_subMesh.hxx
+++ b/src/SMESH/SMESH_subMesh.hxx
@@ 327,7 +327,7 @@ protected:
int _Id;
std::map < int, SMESH_subMesh * >_mapDepend;
 bool _dependenceAnalysed;
+ bool _dependenceAnalysed;
std::vector< SMESH_subMesh * > _ancestors;
SMESH_Algo * _algo; // the algorithm found by last *StateEngine() call
diff git a/src/SMESH_I/SMESH_Gen_i.cxx b/src/SMESH_I/SMESH_Gen_i.cxx
index 30182b0..3b7cc55 100644
 a/src/SMESH_I/SMESH_Gen_i.cxx
+++ b/src/SMESH_I/SMESH_Gen_i.cxx
@@ 474,8 +474,9 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
myHypothesis_i = aCreator>Create(myPoa, GetCurrentStudyID(), &myGen);
if (myHypothesis_i)
{
 myHypothesis_i>SetLibName(aPlatformLibName.c_str()); // for persistency assurance
 myHypCreatorMap[ myHypothesis_i>GetName() ] = aCreator;
+ myHypothesis_i>SetLibName( aPlatformLibName.c_str() ); // for persistency assurance
+ CORBA::String_var hypName = myHypothesis_i>GetName();
+ myHypCreatorMap[ hypName.in() ] = aCreator;
// activate the CORBA servant of hypothesis
hypothesis_i = myHypothesis_i>_this();
@@ 2399,7 +2400,6 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::mesh_array& theMeshesArray,
typedef map TIDsMap;
typedef list TListOfNewGroups;
typedef map< pair, TListOfNewGroups > TGroupsMap;
 typedef std::set TGroups;
TPythonDump* pPythonDump = new TPythonDump;
TPythonDump& aPythonDump = *pPythonDump; // prevent dump of called methods
@@ 2416,7 +2416,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::mesh_array& theMeshesArray,
TGroupsMap aGroupsMap;
TListOfNewGroups aListOfNewGroups;
 SMESH_MeshEditor aNewEditor = ::SMESH_MeshEditor(&aLocMesh);
+ ::SMESH_MeshEditor aNewEditor(&aLocMesh);
SMESH::ListOfGroups_var aListOfGroups = new SMESH::ListOfGroups();
// loop on meshes
@@ 2525,6 +2525,8 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::mesh_array& theMeshesArray,
}
} //elems loop
+ aNewEditor.CrearLastCreated(); // forget the history
+
// copy orphan nodes
SMDS_NodeIteratorPtr itNodes = anInitMeshDS>nodesIterator();
while ( itNodes>more() )
diff git a/src/SMESH_I/SMESH_Gen_i_1.cxx b/src/SMESH_I/SMESH_Gen_i_1.cxx
index 77293d8..65ee1e3 100644
 a/src/SMESH_I/SMESH_Gen_i_1.cxx
+++ b/src/SMESH_I/SMESH_Gen_i_1.cxx
@@ 275,21 +275,16 @@ static SALOMEDS::SObject_ptr publish(SALOMEDS::Study_ptr theStudy,
SO = aStudyBuilder>NewObjectToTag( theFatherObject, theTag );
// define the next tag after given one in the data tree to insert SObject
 std::string anEntry;
 int last2Pnt_pos = 1;
 int tagAfter = 1;
 CORBA::String_var entry;
SALOMEDS::SObject_wrap curObj;
 SALOMEDS::UseCaseIterator_wrap anUseCaseIter = useCaseBuilder>GetUseCaseIterator(theFatherObject);
 for ( ; anUseCaseIter>More(); anUseCaseIter>Next() ) {
 curObj = anUseCaseIter>Value();
 entry = curObj>GetID();
 anEntry = entry.in();
 last2Pnt_pos = anEntry.rfind( ":" );
 tagAfter = atoi( anEntry.substr( last2Pnt_pos+1 ).c_str() );
 if ( tagAfter > theTag ) {
 objAfter = curObj;
 break;
+ if ( theFatherObject>GetLastChildTag() > theTag )
+ {
+ SALOMEDS::UseCaseIterator_wrap anUseCaseIter = useCaseBuilder>GetUseCaseIterator(theFatherObject);
+ for ( ; anUseCaseIter>More(); anUseCaseIter>Next() ) {
+ curObj = anUseCaseIter>Value();
+ if ( curObj>Tag() > theTag ) {
+ objAfter = curObj;
+ break;
+ }
}
}
}
@@ 534,32 +529,6 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent(SALOMEDS::Study_ptr theSt
return father._retn();
}
//=============================================================================
/*!
 * findMaxChildTag [ static internal ]
 *
 * Finds maximum child tag for the given object
 */
//=============================================================================

static long findMaxChildTag( SALOMEDS::SObject_ptr theSObject )
{
 long aTag = 0;
 if ( !theSObject>_is_nil() ) {
 SALOMEDS::Study_var aStudy = theSObject>GetStudy();
 if ( !aStudy>_is_nil() ) {
 SALOMEDS::ChildIterator_wrap anIter = aStudy>NewChildIterator( theSObject );
 for ( ; anIter>More(); anIter>Next() ) {
 SALOMEDS::SObject_wrap anSO = anIter>Value();
 long nTag = anSO>Tag();
 if ( nTag > aTag )
 aTag = nTag;
 }
 }
 }
 return aTag;
}

//=======================================================================
//function : PublishMesh
//purpose :
@@ 584,7 +553,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SALOMEDS::Study_ptr theStudy,
return aMeshSO._retn();
// Find correct free tag
 long aTag = findMaxChildTag( father.in() );
+ long aTag = father>GetLastChildTag();
if ( aTag <= GetAlgorithmsRootTag() )
aTag = GetAlgorithmsRootTag() + 1;
else
diff git a/src/SMESH_I/SMESH_Mesh_i.cxx b/src/SMESH_I/SMESH_Mesh_i.cxx
index 0e298af..5669a0b 100644
 a/src/SMESH_I/SMESH_Mesh_i.cxx
+++ b/src/SMESH_I/SMESH_Mesh_i.cxx
@@ 161,6 +161,11 @@ SMESH_Mesh_i::~SMESH_Mesh_i()
}
_mapHypo.clear();
+ // clear cashed shapes if no more meshes remain; (the cash is blame,
+ // together with publishing, of spent time increasing in issue 22874)
+ if ( _impl>NbMeshes() == 1 )
+ _gen_i>GetShapeReader()>ClearClientBuffer();
+
delete _editor; _editor = NULL;
delete _previewEditor; _previewEditor = NULL;
delete _impl; _impl = NULL;
diff git a/src/SMESH_SWIG/smeshBuilder.py b/src/SMESH_SWIG/smeshBuilder.py
index 24c4835..b4f79d7 100644
 a/src/SMESH_SWIG/smeshBuilder.py
+++ b/src/SMESH_SWIG/smeshBuilder.py
@@ 520,7 +520,8 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
#return self.IsEmbeddedMode()
return SMESH._objref_SMESH_Gen.IsEmbeddedMode(self)
 ## Sets the current study
+ ## Sets the current study. Calling SetCurrentStudy( None ) allows to
+ # switch OFF automatic pubilishing in the Study of mesh objects.
# @ingroup l1_auxiliary
def SetCurrentStudy( self, theStudy, geompyD = None ):
#self.SetCurrentStudy(theStudy)
@@ 601,14 +602,15 @@ class smeshBuilder(object, SMESH._objref_SMESH_Gen):
if error.comment: print "*** CreateMeshesFromGMF() errors:\n", error.comment
return Mesh(self, self.geompyD, aSmeshMesh), error
 ## Concatenate the given meshes into one mesh.
 # @return an instance of Mesh class
+ ## Concatenate the given meshes into one mesh. All groups of input meshes will be
+ # present in the new mesh.
# @param meshes the meshes to combine into one mesh
# @param uniteIdenticalGroups if true, groups with same names are united, else they are renamed
 # @param mergeNodesAndElements if true, equal nodes and elements aremerged
+ # @param mergeNodesAndElements if true, equal nodes and elements are merged
# @param mergeTolerance tolerance for merging nodes
 # @param allGroups forces creation of groups of all elements
+ # @param allGroups forces creation of groups corresponding to every input mesh
# @param name name of a new mesh
+ # @return an instance of Mesh class
def Concatenate( self, meshes, uniteIdenticalGroups,
mergeNodesAndElements = False, mergeTolerance = 1e5, allGroups = False,
name = ""):
@@ 1523,7 +1525,7 @@ class Mesh:
return self.mesh.SetMeshOrder(submeshes)
## Removes all nodes and elements
 # @refresh if @c True, Object browser is automatically updated (when running in GUI)
+ # @param refresh if @c True, Object browser is automatically updated (when running in GUI)
# @ingroup l2_construct
def Clear(self, refresh=False):
self.mesh.Clear()
@@ 1535,7 +1537,8 @@ class Mesh:
if refresh: salome.sg.updateObjBrowser(1)
## Removes all nodes and elements of indicated shape
 # @refresh if @c True, Object browser is automatically updated (when running in GUI)
+ # @param refresh if @c True, Object browser is automatically updated (when running in GUI)
+ # @param geomId the ID of a subshape to remove elements on
# @ingroup l2_construct
def ClearSubMesh(self, geomId, refresh=False):
self.mesh.ClearSubMesh(geomId)