Salome HOME
22874: [CEA 1425] Performance SMESH Module
[modules/smesh.git] / doc / salome / gui / SMESH / input / constructing_meshes.doc
index adf63c6a1505385e6c706af72a77c28d58389ddd..4e8d6060c1b938906730586133afb5c00dff919c 100644 (file)
@@ -2,17 +2,68 @@
 
 \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 (<em>main shape</em>);
+- <em>meshing parameters</em>, 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 bottom-up
+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
+sub-shapes 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
+re-computed).
+
+An algorithm of a certain dimension chosen at mesh creation is applied
+to discretize every sub-shape of this dimension. But you can
+specify a different algorithm or hypothesis to be applied to one or
+a group of sub-shapes by creating a \ref constructing_submeshes_page
+"sub-mesh". You can specify no algorithms at all at mesh object
+creation and specify the meshing parameters on sub-meshes only; then
+only sub-shapes 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:
 <ul>
-  <li> \ref create_mesh_anchor "Creating of a mesh object"</li>
-  <li> \ref evaluate_anchor "Evaluating mesh size"</li>
-  <li> \ref preview_anchor "Previewing the mesh"</li>
-  <li> \ref submesh_order_anchor "Changing submesh priority"</li>
-  <li> \ref compute_anchor "Computing the mesh"</li>
+  <li> \ref create_mesh_anchor "Creation of a mesh object" where you
+  can specify meshing parameters to apply to all sub-shapes of the
+  main shape.</li>
+  <li> \ref constructing_submeshes_page "Creation of sub-meshes"
+  (optional) where you can specify meshing parameters to apply to
+  selected sub-shapes.</li>
+  <li> \ref evaluate_anchor "Evaluating mesh size" (optional) can be
+  used to know approximate number of elements before actual generation
+  of them.</li>
+  <li> \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.</li>
+  <li> \ref submesh_order_anchor "Changing sub-mesh priority"
+  (optional) can be useful if there are concurrent sub-meshes
+  defined.</li>
+  <li> \ref compute_anchor "Computing the mesh" uses defined meshing
+  parameters to generate mesh elements.</li>
+  <li> \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.</li>
 </ul>
-Mesh can be \ref use_existing_anchor "computed using your own meshing algorithms" 
-written in Python.
-
 
 \anchor create_mesh_anchor
 <h2>Creation of a mesh object</h2>
@@ -22,87 +73,163 @@ written in Python.
   <li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
       Mesh"</em> button in the toolbar. 
 
+    <center>
     \image html image32.png
     <em>"Create Mesh" button</em>
+    </center>
 
     The following dialog box will appear: 
 
     \image html createmesh-inv.png
     <br>
   </li>
+  <li> To filter off irrelevant meshing algorithms, you can
+    select <b>Mesh Type</b> in the corresponding list from <b>Any,
+      Hexahedral, Tetrahedral, Triangular </b> and \b Quadrilateral (there
+    can be less items for the geometry of lower dimensions).
+
+    Selection of a mesh type hides all meshing algorithms that cannot
+    generate elements of this type.</li>
+
   <li>Apply \subpage basic_meshing_algos_page "meshing algorithms" and
-    \subpage about_hypo_page "hypotheses" which will be used at computation of
+    \subpage about_hypo_page "hypotheses" which will be used to compute
     this mesh.
 
-    For example, you need to mesh a 3D object.
+    "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 sub-shapes 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 sub-shapes (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 geometrical
+    object does not include shapes (sub-shapes) 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. 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 specifying the required
+    size of mesh edges about the selected vertex (or vertices).
 
-    First, type the name for 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 name of the object not yet appeared in \b Geometry field).
+    For example, you need to mesh a 3D object.
 
+    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.
+    <center>
     \image html image120.png
     <em>"Select" button</em>
+    </center>
 
     Now you can define 3D Algorithm and 3D Hypotheses, which will be
-    applied to solids of your geometrical object. Click the <em>"Add
-      Hypothesis"</em>  button to add a hypothesis.
-
+    applied to discretize the solids of your geometrical object using
+    3D elements. Click the <em>"Add Hypothesis"</em>  button to add a hypothesis.
+    <center>
     \image html image121.png
     <em>"Add Hypothesis" button</em>
+    </center>
+    Click the <em>"Plus"</em> button to enable adding more additional hypotheses.
 
-    Click the <em>"Edit Hypothesis"</em> button to change values for the
+    Click the <em>"Edit Hypothesis"</em> button to change the values for the
     current hypothesis.
-
+    <center>
     \image html image122.png
     <em>"Edit Hypothesis" button</em>
+    </center>
 
-    Most standard 2D and 3D algorithms can work without hypotheses
-    using some default parameters. The use of additional hypotheses
-    is optional (i.e. you may leave "None" in this box).
+    Most 2D and 3D algorithms can work without hypotheses using
+    default meshing parameters. Some algorithms do not require any
+    hypotheses. After selection of an algorithm "Hypothesis" field of
+    the dialog can contain:
+    <ul>
+      <li> <em>\<Default\></em> if the algorithm can work using default
+      parameters.</li>
+      <li> <em>\<None\></em> if the algorithm requires a hypothesis defining
+      its parameters.</li>
+      <li> If the algorithm does not use hypotheses, this field is grayed.</li>
+    </ul>
+    After selection of an algorithm <b>Add. Hypothesis</b> field can contain:
+    <ul>
+      <li> <em>\<None\></em> if the algorithm can be tuned
+      using an additional hypothesis.</li>
+      <li> If the algorithm does not use additional hypotheses, this field is grayed.</li>
+    </ul>
 
     Proceed in the same way with 2D and 1D Algorithms and Hypotheses that
     will be used to mesh faces and edges of your geometry. (Note
     that any object has edges, even if their existence is not
     apparent, for example, a sphere has 4 edges). Note that the
-    choice of hypotheses and of an algorithm of lower dimension depends on
-    the algorithm. 
+    choice of hypotheses and lower dimension algorithms depends on
+    the higher dimension algorithm.
 
-    Some algorithms generate mesh of several dimensions while others, of
-    only one dimension. In the latter case there must be one Algorithm and zero or several
+    If you wish you can select other algorithms and/or hypotheses
+    for meshing some sub-shapes 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
+    be one Algorithm and zero or several
     Hypotheses for each dimension of your object, otherwise you will
     not get any mesh at all. Of course, if you wish to mesh a face,
-    which is a 2D object, you don't need to define 3D Algorithm and
+    which is a 2D object, you do not need to define a 3D Algorithm and
     Hypotheses.
 
     In the <b>Object Browser</b> the structure of the new mesh will be
     displayed as follows:
 
-      \image html image88.jpg
+    <center>
+    \image html image88.jpg
+    </center>
 
-    It contains:
+    It contains: 
     <ul>
+      <li>a mesh name (<em>Mesh_mechanic</em>);
       <li>a reference to the geometrical object on the basis of
-        which the mesh has been constructed;</li> 
+        which the mesh has been constructed (\a mechanic);</li> 
       <li><b>Applied hypotheses</b> folder containing the references
-        to the hypotheses applied at the construction of the mesh;</li>
+        to the hypotheses chosen at the construction of the mesh;</li>
       <li><b>Applied algorithms</b> folder containing the references
-        to the algorithms applied at the construction of the mesh.</li> 
+        to the algorithms chosen at the construction of the mesh.</li> 
     </ul>
 
     There is an alternative way to assign Algorithms and Hypotheses by
     clicking <b>Assign a set of hypotheses</b> button and selecting among
-    pre-defined sets of hypotheses. In addition to the standard
+    pre-defined sets of algorithms and hypotheses. In addition to the built-in
     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 <hypotheses-set-group>
       tags).
-
+      
+      <center>
       \image html hypo_sets.png
-      List of sets of hypotheses: <em>[custom]</em>
-      automatically added to the sets defined by the user
+      List of sets of hypotheses. Tag <em>[custom]</em> is
+      automatically added to the sets defined by the user.
+      </center>
+
+      \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.
   </li>
 </ol>
 
@@ -131,8 +258,10 @@ For this, select the mesh in the Object Browser. From the \b Mesh menu
 select \b Preview or click "Preview" button in the toolbar or activate
 "Preview" item from the pop-up menu.
 
+<center>
 \image html mesh_precompute.png
 <em>"Preview" button</em>
+</center>
 
 Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog. 
 
@@ -143,7 +272,7 @@ Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog.
 <b>Compute</b> button computes the whole mesh.
 
 When the Preview dialog is closed, the question about the storage of temporarily
-created mesh elements appers:
+created mesh elements appears:
 
 \image html preview_tmp_data.png
 
@@ -151,46 +280,46 @@ These elements can be kept in the mesh.
 
 
 \anchor submesh_order_anchor
-<h2>Changing submesh priority</h2>
+<h2>Changing sub-mesh priority</h2>
 
-If the mesh contains concurrent \ref constructing_submeshes_page "submeshes", 
+If the mesh contains concurrent \ref constructing_submeshes_page "sub-meshes", 
 it is possible to change the priority of their computation, i.e. to
 change the priority of applying algorithms to the shared sub-shapes of
 the Mesh shape.
 
-<em>To change submesh priority:</em>
+<em>To change sub-mesh priority:</em>
 
-Choose "Change submesh priority" from the Mesh menu or a pop-up
-menu. The opened dialog shows a list of submeshes in the order of
+Choose "Change sub-mesh priority" from the Mesh menu or a pop-up
+menu. The opened dialog shows a list of sub-meshes in the order of
 their priority. 
 
-There is an example of submesh order modifications of the Mesh created on a Box
+There is an example of sub-mesh order modifications taking a Mesh created on a Box
 shape. The main Mesh object:
 <ul>
   <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=20</li>
   <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>Max Element Area</b>
   </li>
 </ul>
-The first submesh object <b>Submesh_1</b> created on <b>Face_1</b> is:
+The first sub-mesh <b>Submesh_1</b> created on <b>Face_1</b> is:
 <ul>
   <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=4</li>
-  <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
+  <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis <b>MaxElementArea</b>=1200</li>
 </ul>
-The second submesh object <b>Submesh_2</b> created on <b>Face_2</b> is:
+The second sub-mesh <b>Submesh_2</b> created on <b>Face_2</b> is:
 <ul>
   <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=8</li>
-  <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
+  <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis <b>MaxElementArea</b>=1200</li>
 </ul>
 
-And the last submesh object <b>Submesh_3</b> created on <b>Face_3</b> is:
+And the last sub-mesh <b>Submesh_3</b> created on <b>Face_3</b> is:
 <ul>
   <li><i>1D</i> <b>Wire discretisation</b> with <b>Number of Segments</b>=12</li>
-  <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis<b>MaxElementArea</b>=1200</li>
+  <li><i>2D</i> <b>Triangle (Mefisto)</b> with Hypothesis <b>MaxElementArea</b>=1200</li>
 </ul>
 
 The sub-meshes become concurrent if they share sub-shapes that can be
-meshed with different algorithms (or different hypothesises). In the
-example, we have three submeshes with concurrent algorithms, because
+meshed with different algorithms (or different hypotheses). In the
+example, we have three sub-meshes with concurrent algorithms, because
 they have different hypotheses.
 
 The first mesh computation is made with:
@@ -217,18 +346,18 @@ And the last mesh computation is made with:
 <em>"Result mesh with order SubMesh_3, SubMesh_2, SubMesh_1 "</em></center>
 
 As we can see, each mesh computation has a different number of result
-elements and a different mesh discretisation on the shared edges (the edges 
+elements and a different mesh discretization on the shared edges (the edges 
 that are shared between <b>Face_1</b>, <b>Face_2</b> and <b>Face_3</b>)
 
-Additionally, submesh priority (the order of applied algorithms) can
+Additionally, sub-mesh priority (the order of applied algorithms) can
 be modified not only in a separate dialog box, but also in
 the <b>Preview</b>. This helps to preview different mesh results,
-modifying the order of submeshes. 
+modifying the order of sub-meshes. 
 <center>
 \image html mesh_order_preview.png
-<em>"Preview with submesh priority list box"</em></center>
+<em>"Preview with sub-mesh priority list box"</em></center>
 
-If there are no concurrent submeshes under the Mesh object, the user
+If there are no concurrent sub-meshes under the Mesh object, the user
 will see the following information.
 <center>
 \image html mesh_order_no_concurrent.png
@@ -244,70 +373,86 @@ the hypotheses are assigned. For this, select your mesh in
 the <b>Object Browser</b>. From the \b Mesh menu select \b Compute or
 click "Compute" button of the toolbar.
 
+<center>
 \image html image28.png
 <em>"Compute" button</em>
+</center>
+
+After the mesh computation finishes, the Mesh Computation information
+box appears. If you close this box and click "Compute" button again,
+without previously changing meshing parameters, the mesh is
+NOT re-computed and the Mesh Computation information box with
+the same contents is shown. (To fully re-compute the mesh, invoke \ref
+clear_mesh_anchor "Clear Mesh Data" command before).
 
-The Mesh Computation information box appears.
+In case of a success, the box shows information on number of entities
+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.
+failure is provided in \b Errors table.
 
 \image html meshcomputationfail.png
 
-After you select the error, <b>Show Sub-shape</b> button allows
-visualizing in magenta the geometrical entity that causes it.
+After you select an error, <b>Show Sub-shape</b> button allows
+visualizing in magenta the geometrical entity that causes the error.
 
 \image html failed_computation.png 
 <em>3D algorithm failed to compute mesh on a box shown using <b>Show
     Sub-shape</b> button</em>
 
+<b>Publish Sub-shape</b> button publishes the sub-shape, whose meshing
+has failed, in the Geometry component as a child of the main shape, which
+allows analyzing the problematic geometry and creating a sub-mesh on it in
+order to locally tune the hypotheses.
+
+If the failure is caused by an invalid input mesh and the algorithm has
+found which mesh entities are bad, <b>Show bad Mesh</b> 
+button appears in the dialog. Clicked, it shows the bad mesh entities in
+the Viewer in magenta. Sometimes the shown mesh entities are too small
+or/and hidden by other mesh elements. They can be seen after
+switching the mesh to Wireframe visualization mode or switching off
+the visualization of faces and volumes (if any).
+
+<b>Bad Mesh to Group</b> button creates groups of bad mesh entities
+to facilitate their analysis.
+
+\image html show_bad_mesh.png
+<em>Edges bounding a hole in the surface are shown in magenta using <b>Show
+    bad Mesh</b> button</em>
 
 \note Mesh Computation Information box does not appear if you set
 "Mesh computation/Show a computation result notification" preference 
 to the "Never" value. This option gives the possibility to control mesh
 computation reporting. There are the following possibilities: always
-show information box, only if an error occurs or never. 
+show the information box, show only if an error occurs or never. 
 By default, the information box is always shown after mesh computation operation.
 
-<b>Publish Sub-shape</b> button publishes the sub-shape, whose meshing
-failed, in GEOM component as a child of the mesh geometry, which
-allows analyzing the problem geometry and creating a submesh on it in
-order to locally tune hypotheses.
-
-If a cause of failure is an invalid input mesh and the algorithm has
-provided information on what mesh entities are bad <b>Show bad Mesh</b> 
-button appears in the dialog. Clicked, it shows bad mesh entities in
-the Viewer in magenta. Sometimes the shown mesh entities are too small
-or/and hidden by other mesh elements, to see them it can be helpful to
-switch the mesh to Wireframe visualization mode or to switch off
-visualization of faces and volumes (if any).
-
-\anchor use_existing_anchor
-<h2>"Use existing edges" and "Use existing faces" algorithms</h2>
-
-It is possible to create an 1D or a 2D mesh in a python script
-(using <em>AddNode, AddEdge</em> and <em>AddFace</em> commands) and
-then use such sub-meshes in the construction of a 2D or a 3D mesh. For
-this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
-  existing faces</b>. Scenario of their usage is following. For
-example, you want to use standard algorithms to generate 1D and 3D
-meshes and to create 2D mesh by your python code. Then you
-<ul>
-  <li> create a mesh object, assign an 1D algorithm,</li>
-  <li> invoke \b Compute command, which computes an 1D mesh,</li>
-  <li> assign <b>Use existing faces</b> and a 3D algorithm,</li>
-  <li> run your python code, which creates a 2D mesh,</li>
-  <li> invoke \b Compute command, which computes a 3D mesh.</li>
-</ul>
-
-Consider trying a sample script demonstrating usage of 
-\ref tui_use_existing_faces "Use existing faces" algorithm for
-construction of a 2D mesh using Python commands.
-
-\image html use_existing_face_sample_mesh.png
-<em> Mesh computed by \ref tui_use_existing_faces "the sample script"
-  shown in a Shrink mode.</em>
+<p><p>
+\anchor edit_anchor
+<h2>Editing the mesh</h2>
+
+It is possible to \ref modifying_meshes_page "edit the mesh" of
+lower dimension before generation of mesh of higher dimension.
+
+For example you can generate 2D mesh, modify it using e.g. 
+\ref pattern_mapping_page, and then generate 3D mesh basing on the
+modified 2D mesh. The workflow is following:
+- Define 1D and 2D meshing algorithms.
+- Compute the mesh. 2D mesh is generated.
+- Apply \ref pattern_mapping_page.
+- Define 3D meshing algorithms without modifying 1D and 2D algorithms
+and hypotheses.
+- Compute the mesh. 3D mesh is generated.
+
+\note Nodes and elements added \ref adding_nodes_and_elements_page
+"manually" can't be used in this workflow because the manually created
+entities are not attached to any geometry and thus (usually) can't be
+found by a mesher paving some geometry.
+
+<b>See Also</b> a sample TUI Script demonstrates the possibility of 
+\ref tui_editing_while_meshing "Intermediate edition while meshing"
 
 */