Salome HOME
22874: [CEA 1425] Performance SMESH Module
[modules/smesh.git] / doc / salome / gui / SMESH / input / constructing_meshes.doc
index d62feac7cc5102ef33d3a00a1ae361877ac6e11f..4e8d6060c1b938906730586133afb5c00dff919c 100644 (file)
 
 \page constructing_meshes_page Constructing meshes
 
-\n Construction of a mesh 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>Selecting a geometrical object for meshing</li>
-<li>Applying \subpage basic_meshing_algos_page "meshing algorithms" and
-\subpage about_hypo_page "hypotheses" which will be used at computation of
-this 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>
 
+\anchor create_mesh_anchor
+<h2>Creation of a mesh object</h2>
 <em>To construct a mesh:</em>
 <ol>
-<li>In the \b Mesh menu select <b>Create Mesh</b> or click <em>"Create
-Mesh"</em> button in the toolbar. 
+  <li>Select a geometrical object for meshing.</li>
+  <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 to compute
+    this mesh.
+
+    "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).
+
+    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 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 the values for the
+    current hypothesis.
+    <center>
+    \image html image122.png
+    <em>"Edit Hypothesis" button</em>
+    </center>
+
+    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 lower dimension algorithms depends on
+    the higher dimension algorithm.
+
+    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 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:
+
+    <center>
+    \image html image88.jpg
+    </center>
+
+    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 (\a mechanic);</li> 
+      <li><b>Applied hypotheses</b> folder containing the references
+        to the hypotheses chosen at the construction of the mesh;</li>
+      <li><b>Applied algorithms</b> folder containing the references
+        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 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. 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>
+
+Consider trying a sample script for construction of a mesh from our 
+\ref tui_creating_meshes_page "TUI Scripts" section.
+
+\anchor evaluate_anchor
+<h2>Evaluating mesh size</h2>
 
-\image html image32.png
-<center><em>"Create Mesh" button</em></center>
+After the mesh object is created and all hypotheses are assigned and
+before \ref compute_anchor "Compute" operation, it is possible to
+calculate the eventual mesh size. For this, select the mesh in
+the <b>Object Browser</b> and from the \b Mesh menu select \b
+Evaluate. The result of evaluation will be displayed in the following
+information box: 
 
-The following dialog box will appear: 
+\image html mesh_evaluation_succeed.png
 
-\image html createmesh-inv.png
-</li>
-<li>For example, you need to mesh a 3d object.
-\n First, type the name for your mesh in the "Name" box, by default,
-it is "Mesh_1". Then select the object you wish to mesh in the Object
-Browser and click the "Add" button.
+\anchor preview_anchor
+<h2>Previewing the mesh</h2>
 
-\image html image120.png
-<center><em>"Add" button</em></center>
+Before \ref compute_anchor "the mesh computation", it is also possible
+to see the mesh preview.
 
-Now you can define 1d Algorithm and 1d Hypotheses, which will be
-applied to the edges of your object. (Note that any object has edges,
-even if their existence is not apparent, for example, a sphere has 4
-edges). Click the <em>"Add Hypothesis"</em>  button to add a hypothesis.
+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.
 
-\image html image121.png
-<center><em>"Add Hypothesis" button</em></center>
+<center>
+\image html mesh_precompute.png
+<em>"Preview" button</em>
+</center>
 
-Click the <em>"Edit Hypothesis"</em> button to define values for the
-current hypothesis.
+Select <b>1D mesh</b> or <b>2D mesh</b> preview mode in the Preview dialog. 
 
-\image html image122.png
-<center><em>"Edit Hypothesis" button</em></center>
+\image html preview_mesh_1D.png "1D mesh preview shows nodes computed on geometry edges"
+<br>
+\image html preview_mesh_2D.png "2D mesh preview shows edge mesh elements, computed on geometry faces"
 
-The use of additional hypotheses is optional (i.e. you may leave
-"None" in this box).
+<b>Compute</b> button computes the whole mesh.
 
-Proceed in the same way with 2d and 3d Algorithms and Hypotheses, note
-that the choice of hypotheses depends on the algorithm. There must be
-one Algorithm and one 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 Hypotheses.
-\n In the <b>Object Browser</b> the structure of the new mesh will be
-displayed as follows:
+When the Preview dialog is closed, the question about the storage of temporarily
+created mesh elements appears:
 
-\image html image88.jpg
+\image html preview_tmp_data.png
 
-It contains:
+These elements can be kept in the mesh.
+
+
+\anchor submesh_order_anchor
+<h2>Changing sub-mesh priority</h2>
+
+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 sub-mesh priority:</em>
+
+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 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 sub-mesh <b>Submesh_1</b> created on <b>Face_1</b> is:
 <ul>
-<li>a reference to the geometrical object on the basis of which the mesh has been constructed;</li>
-<li><b>Applied hypotheses</b> folder containing the references to the
-hypotheses applied to the construction of the mesh;</li>
-<li><b>Applied algorithms</b> folder containing the references to the
-algorithms applied to the construction of the mesh.</li>
+  <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>
 </ul>
+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>
+</ul>
+
+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>
+</ul>
+
+The sub-meshes become concurrent if they share sub-shapes that can be
+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:
+<center>
+\image html mesh_order_123.png
+<em>"Mesh order SubMesh_1, SubMesh_2, SubMesh_3"</em></center>
+<center>
+\image html mesh_order_123_res.png
+<em>"Result mesh with order SubMesh_1, SubMesh_2, SubMesh_3 "</em></center>
+
+The next mesh computation is made with:
+<center>
+\image html mesh_order_213.png
+<em>"Mesh order SubMesh_2, SubMesh_1, SubMesh_3"</em></center>
+<center>
+\image html mesh_order_213_res.png
+<em>"Result mesh with order SubMesh_2, SubMesh_1, SubMesh_3 "</em></center>
 
-There is an alternative way to create a mesh on an object simply by
-clicking <b>Assign a set of hypotheses</b> button and selecting between
-Automatic Tetrahedralization or Hexahedralization.  The program will
-automatically generate a 3D mesh with the most appropriate
-settings. In the same way you can apply this functionality for meshing
-2D objects, in which case 3D algorithms are not applied.</li>
-<li>Now, when everything is ready, select your mesh in the <b>Object
-Browser</b>. From the \b Mesh menu select \b Compute or click "Compute" button of the
-toolbar. 
+And the last mesh computation is made with:
+<center>
+\image html mesh_order_321.png
+<em>"Mesh order SubMesh_3, SubMesh_2, SubMesh_1"</em></center>
+<center>\image html mesh_order_321_res.png
+<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 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, 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 sub-meshes. 
+<center>
+\image html mesh_order_preview.png
+<em>"Preview with sub-mesh priority list box"</em></center>
+
+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
+<em>"No concurrent submeshes detected"</em></center>
+
+
+\anchor compute_anchor
+<h2>Computing the mesh</h2>
+
+It is equally possible to skip  \ref evaluate_anchor "the Evaluation"
+and \ref preview_anchor "the Preview" and to \b Compute the mesh after
+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
-<center><em>"Compute" button</em></center>
+<em>"Compute" button</em>
+</center>
 
-The Mesh Computation information box appears.
+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).
+
+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 Subshape</b> button allows
-visualizing 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>
 
-\image html failed_computation.png "Example of the invalid input mesh"
+<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.
 
-\Note Mesh Computation Information box does not appear if you set
+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 Subshape</b> button publishes the subshape, 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.
+<p><p>
+\anchor edit_anchor
+<h2>Editing the mesh</h2>
 
-<b>NOTE</b> It is possible to define a 1D or a 2D mesh in a
-python script and then use such submeshes in the construction of a 3D
-mesh. For this, there exist two algorithms: <b>Use existing edges</b> and <b>Use
-existing faces</b>. They are not entirely usable from the GUI, so a
-mesh created using these algorithms should be exported into a python
-script, edited and then imported into the GUi. 
+It is possible to \ref modifying_meshes_page "edit the mesh" of
+lower dimension before generation of mesh of higher dimension.
 
-Consider trying a sample script for construction of a mesh from our 
-\ref tui_creating_meshes_page "TUI Scripts" section.
-</li>
-</ol>
+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"
 
-*/
\ No newline at end of file
+*/