5.6 Mesh Modification
On this page:
5.6.1 Mesh Smoothing
5.6.1.5 Adjust Boundary Orthogonal
5.6.1.6 Centroid Area Pull
5.6.1.7 Condition Number
5.6.1.8 Edge Length
5.6.1.9 Equipotential
5.6.1.10 Laplacian
5.6.1.11 Mean Ratio
5.6.1.12 Smart Laplacian
5.6.1.13 Untangle
5.6.1.14 Winslow
5.6.2 Align Mesh
5.6.3 Block Repositioning
5.6.4 Collapsing Mesh
5.6.5 Creating and Merging Mesh Elements
5.6.6 Edge Swapping
5.6.7 Matching Tetrahedral Meshes
5.6.8 Mesh Cleanup
5.6.9 Mesh Coarsening
5.6.10 Mesh Column Operations
5.6.11 Mesh Refinement
5.6.12 Mesh Scaling for Flexible Hex Refinement
5.6.13 Node and Nodeset Repositioning
5.6.14 Mesh Pillowing
5.6.15 Remeshing
5.6.16 Hexset Command
2021.11

5.6 Mesh Modification

After meshing is completed, it may be desirable to change features of the mesh without remeshing the whole volume. Mesh modification methods include tools for improving mesh quality, repositioning mesh elements, or changing mesh density. These methods can be applied on the whole model, or on small sections of the model without requiring remeshing the geometry, and without modifying the underlying geometry.

5.6.1 Mesh Smoothing

After generating the mesh, it is sometimes necessary to modify that mesh, either by changing the positions of the nodes or by removing the mesh altogether. Cubit contains a variety of mesh smoothing algorithms for this purpose. Node positions can also be fixed, either by specific node or by geometry entity, to restrict the application of smoothing to non-fixed nodes.

Mesh smoothing in Cubit operates in a similar fashion to mesh generation, i.e. it is a process whereby a smooth scheme is chosen and set, then a smooth command performs the actual smoothing. Like meshing algorithms, there is a variety of smoothing algorithms available, some of which apply to multiple geometry entity types and some which only apply to one specific type (these algorithms are described below.)

To smooth the mesh on a geometry entity

  1. On the Command Panel, click on Mesh.

  2. Click on Volume, Surface or Curve.

  3. Click on the Smoothing action button.

  4. Select the desired scheme from the drop-down menu.

  5. Enter the appropriate values for Volume ID(s), Surface ID(s) or Curve ID(s). This can also be done using the Pick Widget function.

  6. Depending on the scheme selected, optionally specify the Tolerance.

  7. Enter any other appropriate settings.

  8. Click Apply.

{curve|surface|volume} <range> Smooth Scheme <scheme>

where <scheme> is any acceptable smooth scheme described in this section. Also set any scheme-specific information, using the smooth scheme setting commands described below.

smooth curve <range>

smooth surface <range> [global]

smooth {body|volume|group} <range>

Groups of entities may be smoothed, by smoothing a group or a body.

If a Body is specified, the volumes in that Body are smoothed. If a Group is specified, only the volume meshes within these groups are smoothed - no smoothing of the surface meshes is performed.

5.6.1.1 Global Smoothing

When smoothing a set of surfaces, the keyword global can be added to the smooth command such as

smooth surface <range> [global]

If the smoothing algorithm for two neighboring surfaces are both allowed to move boundary nodes, then appending the "global" keyword will often result in a higher quality mesh near the curve(s) shared by those two surfaces.

5.6.1.2 Focused Smoothing on Groups of Mesh Entities

Meshed entities such as hexes or tris can be smoothed individually or in groups by specifying the entities in a list.

To smooth hexes and tets

  1. On the Command Panel, click on Mesh.

  2. Click on Hex or Tet.

  3. Click on the Smooth action button.

  4. Enter the appropriate value for Hex ID(s) or Tet ID(s). This can also be done using the Pick Widget function.

  5. Optionally, specify the scheme.

  6. Click Apply.

To smooth quads, tris and edges

  1. On the Command Panel, click on Mesh.

  2. Click on Quad, Tri or Edge.

  3. Click on the Smooth action button.

  4. Enter the appropriate value for Quad ID(s), Tri ID(s) or Edge ID(s). This can also be done using the Pick Widget function.

  5. Optionally, specify the scheme.

  6. Enter the appropriate value for Target Surface ID or Target Curve ID. This can also be done using the Pick Widget function.

  7. Click Apply.

Smooth {Hex|Tet} <range>[Scheme {Equipotential|Laplacian|Random}]

Smooth {Face|Tri} <range>[Scheme {Laplacian|Centroid|Winslow}] [Target Surface <id>]

Smooth Edge <id_range> [Scheme Laplacian] [Target Surface <id>]

The smooth edge command allows the user to smooth individual edges owned by a curve. Specifying a target curve allows the user to move the edges on a meshed curve to a different curve. The target curve or surface does not necessarily need to be the owning curve or surface of the nodes. For example, if given two curves (A and B) and curve A was meshed, the target smoothing could be used to move all of the edges of curve A onto curve B. The smooth scheme option for the edge smoothing is currently limited only to the laplacian scheme.

The smooth face|tri command is used to smooth individual faces or triangles. The target option is similar to the curve target option above. Faces or Tris can be smoothed to a surface that is not necessarily the owning surface; in fact, the faces or tris do not even have to be attached to any surface. This makes this option especially helpful for smoothing free meshes. Specifying a smooth scheme allows for relaxation based surface smoothers (i.e. centroid area pull, laplacian, winslow) to be utilized during targeted smoothing. It is not currently enabled for optimization based smoothing schemes.

5.6.1.3 Smooth Tolerance

Smoothing algorithms move nodes in an attempt to improve the quality of the mesh elements. Most of these algorithms are iterative, and the algorithm terminates when some criterion is met. Specifically, for the Laplacian and Equipotential style smoothers, smoothing is terminated either by satisfying a smoothing tolerance or by performing the maximum number of smoothing iterations. For these smoothers, the smooth tolerance may be set by the user:

[Set] Smooth Tolerance <tol>

The value <tol> tells the smoother to stop when node movement is less than tol * local_minimum_edge_length.

The default value for tol is 0.05. The maximum number of iterations may be set by the user. For volumes, the smooth tolerance and iterations may also be set by

(Note: The above command affects all smoother that respect tolerance.)

Volume Smooth Tolerance <tol>

Volume Smooth Iterations <iters>

(Note: The above two commands only affect the volume smoothers.)

5.6.1.4 Boundary Mesh Smoothing

Where used in the smooth schemes below, the Free keyword permits the nodes lying on the bounding entities to "float" along those entities; without this keyword, boundary nodes remain fixed.

Nodal positions may be fixed so that no smoothing scheme, either implicit or explicit, will move them, with the following command:

{Curve|Surface|Volume} <range> Node Position {Fixed|Free}

Node <range> Position {Fixed|Free}

The following command does not fix nodal positions, but does fix the connectivity of the mesh, preventing certain volume schemes from changing the bounding mesh:

{Curve|Surface|Volume} Mesh {Fixed|Free}

The additional following scheme is available for research purposes and can be used only after issuing a set developer on command.

5.6.1.5 Adjust Boundary Orthogonal

Applies to: Surface Meshes

Summary: This smoother creates a near orthogonal grid and optionally will make an orthogonal grid if the geometry permits.

To adjust boundary orthogonal

  1. On the Command Panel, click on Mesh and then Surface.

  2. Click on the Smooth action button.

  3. Select Orthogonal from the drop-down menu.

  4. Enter in the appropriate values for Surface ID(s). This can also be done using the Pick Widget function.

  5. Optionally enter in the appropriate settings for Normal to Curve and Fix Nodes On Curve.

  6. Click Apply.

adjust boundary [orthogonal] {surface|group} <id_range> [Iterations <val>] [snap_to_normal [curve <id>] [fixed curve <id>]]

Discussion:

Adjust Boundary Orthogonal iteratively applies the centroidal area pull algorithm with free boundary nodes. This approximates the affects of an elliptical smoothing algorithm. This algorithm works best with mapped meshes which have an element aspect ratio close to 1. The snap_to_normal option is not allowed for non-mapped meshes.

Figure 374:

Figure 375:

Figure 1. The affect of the "adjust boundary orthogonal surface 1" on a chevron shape. Note that the nodes are pulled into the acute angles and the edges at the boundary are pulled into a position that is closer to perpendicular at the boundary.

With some geometries with a mapped mesh it is possible to draw a line that is orthogonal to a boundary curve along the entire u or v direction of the mesh. In these cases, this command optionally allows the user to specify the option snap_to_normal. Nodal lines will be created normal to the first curve this is found that will allow perpendicular element edges to span the mesh. The user may optionally specify a curve that is used as the perpendicular basis for projecting the edges.

An edge may also be set as fixed so that a subsequent adjust boundary orthogonal will not affect that edge. If both snap_to_normal and fixed are set, the curve ids MUST be identical.

Figure 376:

Figure 377:

Figure 2. The affect of adjust boundary orthogonal with the snap to normal curve option is shown. The resulting mesh is orthogonal to the given boundary and projects straight through the mesh.

The following is an example of how to use this command to create the desired grid in Cubit. Note that to get the desired orthogonal grid the user must adjust the surfaces one at a time.

reset
create surface ellipse major radius 2 minor radius 1 zplane
imprint volume 1with position 0 1 0
create curve offset curve 2 distance 1 extended
create curve offset curve 4 distance 2 extended
create surface skin curve 2 4
create surface skin curve 4 5
delete surface 1
merge all
surface all scheme map
mesh surf all
adjust boundary orthogonal surface 2 snap_to_normal curve 6
adjust boundary orthogonal surface 3snap_to_normal curve 4 fixed curve 4

5.6.1.6 Centroid Area Pull

Applies to: Surface Meshes

Summary: Attempts to create elements of equal area

To create elements of equal area

  1. On the Command Panel, click on Mesh and then Surface.

  2. Click on the Smooth action button.

  3. Select Centroid Area from the drop-down menu.

  4. Enter in the appropriate values for Surface ID(s). This can also be done using the Pick Widget function.

  5. Click Apply.

Surface <range> Smooth Scheme Centroid Area Pull [Free]

Discussion:

This smooth scheme attempts to create elements of equal area. Each node is pulled toward the centroids of adjacent elements by forces proportional to the respective element areas (Jones, 74).

5.6.1.7 Condition Number

Applies to: Triangular or Quadrilateral Surface Meshes, Tetrahedral or Hexahedral Volume Meshes. Does not apply to Mixed Element Meshes.

Summary: Optimizes the mesh condition number to produce well-shaped elements.

To use the condition number smoother

  1. On the Command Panel, click on Mesh and then Surface.

  2. Click on the Smooth action button.

  3. Select Condition Number from the drop-down menu.

  4. Enter in the appropriate values for Surface ID(s). This can also be done using the Pick Widget function.

  5. Enter in the appropriate settings for Condition Number and Time (minutes).

  6. Click Apply.

Surface <surface_id_range> Smooth Scheme Condition Number [beta <double=2.0>] [cpu <double=10>]

Related Commands:

Untangle

Discussion:

The condition number smoother is designed to be the most robust smoother in Cubit because it guarantees that if the initial mesh is non-inverted then the smoothed mesh will also be non-inverted. The price exacted for this capability is that this smoother is not as fast as some of the other smoothers.

Condition Number measures the distance of an element from the set of degenerate (non-convex or inverted) elements. Optimization of the condition number increases this distance and improves the shape quality of the elements. Condition number optimization requires that the given mesh contain no negative Jacobians. If the mesh contains negative Jacobians and this command is issued, Cubit automatically calls the Untangle smoother and attempts to remove the negative Jacobians. If successful, condition number smoothing occurs next; the resulting mesh should have no negative Jacobians. If untangling is unsuccessful, condition number smoothing is not performed.

There is no "fixed/free" option with this command; boundary nodes are always held fixed.

The command above only sets the smoothing scheme; to actually smooth the mesh one must subsequently issue the command "smooth surface <surface_id_range>" or "smooth volume <volume_id_range>".

Stopping Criteria: Smoothing will proceed until the objective function has been minimized or until one of two user input stopping criteria are satisfied. To input your own stopping criterion use the optional parameters ’beta’ and ’cpu’ in the command above. The value of beta is compared at each iteration to the maximum condition number in the mesh. If the maximum condition number is less than the value of beta, the iteration halts. In Cubit condition number ranges from 1.0 to infinity, with 1.0 being a perfectly shaped element. Thus the smaller the maximum condition number, the better the mesh shape quality. The default value of the beta parameter is 2.0. The value supplied for the "cpu" stopping criterion tells the code how many minutes to spend trying to optimize the mesh. The default value is 10 minutes. Optimization may also be halted by using "control-C" on your keyboard.

To view a detailed report of the smoothing in progress issue the command "set debug 91 on" prior to smoothing the surfaces or volumes. You will get a synopsis of whether or not untangling is needed first and whether the stopping criteria have been satisfied. In addition the following printout information is given for each iteration of the conjugate gradient numerical optimization:

iteration=n, evals=m, fcn=value1, dfmax=value2, time=value3 ave_cond=value4, max_cond=value5, min_jsc=value6

n is the iteration count, m is the number of objective function evaluations performed per iteration, value1 is the value of the objective function (this usually decreases monotonically), value2 is the norm of the gradient (does not always decrease monotonically), and value3 is the cumulative cpu time (in seconds) spent up to the current iteration. The minimum possible value of the objective function is zero but this is attained only for a perfect mesh. ave_cond, max_cond, and min_jsc are the average and maximum condition number, and the minimum scaled jacobian. ave_cond generally decreases monotonically because it is directly related to value1.

5.6.1.8 Edge Length

Applies to: Surfaces

Summary: This smoother tries to make all edge lengths equal

To use edge length smoothing

  1. On the Command Panel, click on Mesh and then Surface.

  2. Click on the Smooth action button.

  3. Select Edge Length from the drop-down menu.

  4. Enter in the appropriate values for Surface ID(s). This can also be done using the Pick Widget function.

  5. Click Apply.

Surface <range> Smooth Scheme Edge Length

Discussion:

Edge Length smoothing in Cubit is provided by MESQUITE, a mesh optimization toolkit by Argonne National Laboratory and Sandia National Laboratories. (See Brewer, et al. 2003 for more details on the MESQUITE toolkit.) This smooth scheme may be useful for lengthening the shortest edge length in paved meshes.

Interior node positions are adjusted in an optimization loop where the optimal element has an ideal shape (square) and has an area equal to the average element area of the input mesh.

NOTE: This smoother should be avoided when the mesh contains high aspect-ratio elements that the user wants to keep.

Because this smoother essentially tries to make all the edge lengths equal, it is designed to work well on meshes whose elements have aspect ratios close to 1. The farther from 1 the aspect ratio is, the less applicable this smoother will be.

5.6.1.9 Equipotential

Applies to: Volume Meshes

Summary: Attempts to equalize the volume of elements attached to each node

To use edge length smoothing

  1. On the Command Panel, click on Mesh and then Volume.

  2. Click on the Smoothing action button.

  3. Select Equipotential from the drop-down menu.

  4. Enter in the appropriate values for Volume ID(s). This can also be done using the Pick Widget function.

  5. Optionally, select Specify Tolerance to set a specific Tolerance value.

  6. Click Apply.

Volume <range> Smooth Scheme Equipotential [Free]

Discussion:

This smoother is a variation of the Equipotential (Jones, 74) algorithm that has been extended to manage non-regular grids (Tipton, 90). This method tends to equalize element volumes as it adjusts nodal locations. The advantage of the equipotential method is its tendency to "pull in" badly shaped meshes. This capability is not without cost: the equipotential method may take longer to converge or may be divergent. To impose an equipotential smooth on a volume, each element must be smoothed in every iteration–a typically expensive computation. While a Laplacian method can complete smoothing operations with only local nodal calculations, the equipotential method requires complete domain information to operate.

5.6.1.10 Laplacian

Applies to: Curve, Surface, and Volume meshes

Summary: Tries to make equal edge lengths

To use laplacian smoothing

  1. On the Command Panel, click on Mesh.

  2. Click on Volume, Surface or Curve.

  3. Click on the Smoothing action button.

  4. Select Laplacian from the drop-down menu.

  5. Enter in the appropriate values for Volume ID(s), Surface ID(s) or Curve ID(s). This can also be done using the Pick Widget function.

  6. Optionally, select Specify Tolerance to set a specific Tolerance value.

  7. Click Apply.

{Surface|Volume} <range> Smooth Scheme Laplacian [Free] [Global]

Discussion:

The length-weighted Laplacian smoothing approach calculates an average element edge length around the mesh node being smoothed to weight the magnitude of the allowed node movement (Jones, 74). Therefore this smoother is highly sensitive to element edge lengths and tends to average these lengths to form better shaped elements. However, similar to the mapping transformations, the length-weighted Laplacian formulation has difficulty with highly concave regions.

Currently, the stopping criterion for curve smoothing is 0.005, i.e., nodes are no longer moved when smoothing moves the node less than 0.005 * the minimum edge length. The maximum number of smoothing iterations is the maximum of 100 and the number of nodes in the curve mesh. Neither of these parameters can currently be set by the user.

Using the global keyword when smoothing a group of surfaces will allow smoothing of mesh on shared curves to improve the quality of elements on both surfaces sharing that curve.

5.6.1.11 Mean Ratio

Applies to: Triangular or Quadrilateral Surface Meshes, Tetrahedral or Hexahedral Volume Meshes. Does not apply to Mixed Element Meshes.

Summary: Moves interior mesh nodes to optimize the average mean ratio metric value of the mesh.

To use mean ratio smoothing

  1. On the Command Panel, click on Mesh.

  2. Click on Volume or Surface.

  3. Click on the Smoothing action button.

  4. Select Mean Ratio from the drop-down menu.

  5. Enter in the appropriate values for Volume ID(s) or Surface ID(s). This can also be done using the Pick Widget function.

  6. Enter the appropriate value for Time (minutes).

  7. Click Apply.

Surface <surface_id_range> Smooth Scheme Mean Ratio [cpu <double=10>]

Volume <volume_id_range> Smooth Scheme Mean Ratio [cpu <double=10>]

Discussion:

Cubit includes a mean ratio smoother provided by MESQUITE, a mesh optimization toolkit by Argonne National Laboratory and Sandia National Laboratories. (See Brewer, et al. 2003 for more details on the MESQUITE toolkit.) This smoother is similar in purpose to the Condition Number smoother. However, the Mean Ratio smoother uses a second order optimization method, and therefore it will often reach a near-optimal mesh more quickly than the Condition Number smoother. The Mean Ratio smoother requires the initial mesh to be untangled, but the smoother is guaranteed to not tangle the mesh. If the user attempts to call the Mean Ratio smoother on a tangled mesh, an untangler will first attempt to untangle the mesh before calling the Mean Ratio smoother.

The Mean Ratio smoother’s optimization process terminates when one of the following three criteria is met:

  1. The mesh is "close" to an optimal mesh configuration.

  2. The maximum allotted time has been exceeded.

  3. The user interrupts the smoothing process.

The user has control over the second and the third criteria only. For criterion 2, the default is for the smoother to terminate after ten minutes even if a near-optimal mesh has not been reached. The user can change this time bound by specifying the optional "cpu" argument in the command listed above. This argument takes a single, positive number that represents the time (in minutes) that will be used as a time bound. If the user wishes to terminate the process early, criteria three allows the user to "interrupt" (for example, on some platforms, by pressing CTRL-C) the process. If the process is terminated early, the mesh will not revert to the original node positions; Cubit will instead keep the partially optimized mesh.

5.6.1.12 Smart Laplacian

Applies to: Surface and Volume meshes

Summary: Tries to make equal edge lengths while ensuring no degradation in element shape

To use smart laplacian smoothing

  1. On the Command Panel, click on Mesh.

  2. Click on Volume or Surface.

  3. Click on the Smoothing action button.

  4. Select Smart Laplacian from the drop-down menu.

  5. Enter in the appropriate values for Volume ID(s) or Surface ID(s). This can also be done using the Pick Widget function.

  6. Click Apply.

{Surface|Volume} <range> Smooth Scheme Smart Laplacian

Discussion:

The Smart Laplacian smoothing approach is a variation on the standard Laplacian algorithm. The algorithm iteratively loops over the mesh and updates nodes based on the location of their neighbors. First, a patch of elements is formed around a given node. The quality of this patch is assessed to determine the quality of the worst shaped element. Then a new candidate node position is calculated as the average of the neighboring nodes. The quality of the patch is assessed again using the candidate node position. If there has been no degradation in the quality of the elements in the patch, the candidate node position is accepted; otherwise, the candidate node position is rejected and the node is returned to its previous position.

The Smart Laplacian smoother is intended to provide a reliable smoother that is nearly as fast as the Length-Weighted Laplacian smoother. Due to the dual goals of this smoother, making equal edge length and improving element shape, it will not always be able to make progress. However, it is often useful as a quick alternative to the more time-consuming optimization methods like Mean Ratio or Condition Number. When this smoother fails to make significant progress, the optimization methods can be tried.

The Smart Laplacian Smoother uses the Mean Ratio quality measure to assess element shape. This smoother is ensuring no degradation in the minimum Mean Ratio. The Mean Ratio smoother is optimizing the same metric, but it is attempting to improve the average Mean Ratio quality.

5.6.1.13 Untangle

Applies to: Triangular or Quadrilateral Surface Meshes Tetrahedral or Hexahedral Volume Meshes. Does not apply to Mixed Element Meshes.

Summary: Removes as many negative Jacobians from the mesh as possible by minimizing a certain objective function.

To use untangle smoothing

  1. On the Command Panel, click on Mesh.

  2. Click on Volume or Surface.

  3. Click on the Smoothing action button.

  4. Select Untangle from the drop-down menu.

  5. Enter in the appropriate values for Volume ID(s) or Surface ID(s). This can also be done using the Pick Widget function.

  6. Enter the appropriate values for Scaled Jacobian and Time (minutes).

  7. Click Apply.

Surface <surface_id_range> Smooth Scheme Untangle [beta <double=0.02>] [cpu <double=10>]

Volume <volume_id_range> Smooth Scheme Untangle [beta <double=0.02>] [cpu <double=10>]

Related Commands:

Condition Number

Discussion:

The Untangle ’smoother’ is designed to eliminate negative Jacobians from a given mesh by moving nodes to appropriate locations. If a mesh node is not involved in causing a negative Jacobian it will not be moved. If a mesh has no negative Jacobians, the Untangler will not move any of the nodes. This smoother is not magic: if an untangled mesh does not exist for the given mesh topology, the untangler will not untangle the mesh. Instead, it will do the best it can and exit gracefully. An untangled mesh produced by this smoother will often have poor shape quality; in that case it is recommended that untangling be followed by condition number smoothing. The untangle smoother is automatically called by the condition number smoother.

There is no "fixed/free" option with this command; boundary nodes are always held fixed. As a result, users should be aware that the volume untangler cannot succeed if the volume contains a surface mesh which contains a negative Jacobian. In that case, one must first remove the surface mesh negative Jacobians by invoking the surface Untangler and then invoke the volume Untangler.

The command above only sets the smoothing scheme; to actually smooth the mesh one must subsequently issue the command smooth surface <surface_id_range> or smooth volume <volume_id_range>.

Stopping Criteria: Untangling will proceed until the objective function has been minimized or the optional user input cpu has been satisfied. The latter stopping criterion tells the code how many minutes to spend trying to untangle the mesh. The default value is 10 minutes. Optimization may also be halted by using "control-C" on your keyboard.

Beta Parameter: An optional user input parameter beta plays a role in determining the optimal mesh. Optimization proceeds until the minimum scaled Jacobian of the mesh is (roughly) greater than beta. To remove negative Jacobians one would need beta=0 (however, as a safety margin, we choose beta=0.02 as the default). To further improve the scaled Jacobian of the mesh, input a larger value of "beta". If a mesh with all scaled Jacobians greater than "beta" does not exist, optimization will continue until the cpu time stopping criterion has been met. Therefore, it is best not to use "beta" values too large (say, greater than 0.2) without also decreasing the cpu time limit.

To view a detailed report of the smoothing in progress issue the command "set debug 91 on" prior to smoothing the surfaces or volumes. You will get a synopsis of whether or not untangling is needed and whether the stopping criteria are satisfied. In addition the following printout information is given for each iteration of the conjugate gradient numerical optimization:

Iteration=n, Evals=m, Fcn=value1, dfmax=value2, time=value3 min_jsc=value4

n is the iteration count, m is the number of objective function evaluations performed per iteration, value1 is the value of the objective function (this usually decreases monotonically), value2 is the norm of the gradient (does not always decrease monotonically), and value3 is the cumulative cpu time (in seconds) spent up to the current iteration. The minimum possible value of the objective function is zero; this value is attained only when the minimum scaled Jacobian of the mesh exceeds "beta". The minimum scaled jacobian is also reported.

5.6.1.14 Winslow

Applies to: Surface meshes

Summary: Elliptic smoothing technique for structured and unstructured surface meshes

To use winslow smoothing

  1. On the Command Panel, click on Mesh and then Surface.

  2. Click on the Smooth action button.

  3. Select Winslow from the drop-down menu.

  4. Enter the appropriate values for Surface ID(s). This can also be done using the Pick Widget function.

  5. Click Apply.

Surface <range> Smooth Scheme Winslow [Free]

Discussion:

Winslow elliptic smoothing (Knupp, 98) is based on solving Laplaces equation with the independent and dependent variables interchanged. The method is widely used in conjunction with the mapping and submapping methods to give smooth meshes with positive Jacobians, even on non-convex two-dimensional regions. The method has been extended in Cubit to work on unstructured meshes.

5.6.2 Align Mesh

At times it is desirable to have identical meshes on two different surfaces or curves. The align mesh command will attempt to assign correspondence between nodes on surfaces or curves and move the nodes on one surface or curve to match the configuration on the other. The command syntax is:

Align Mesh Surface <id> [CloseTo] Surface <id> [Tolerance <tol>]

Align Mesh Curve <id> [CloseTo] Curve <id> [Tolerance <tol>]

These two commands align the mesh on the first entity with that of the second entity. This means that nodes on the first entity will be moved to the closest location possible to their corresponding nodes on the second entity. This is done without regard to mesh quality, so it is possible to invert elements with this command.

Align Mesh Node <id> [CloseTo] Node <id> [Tolerance <tol>]

This command aligns the first node with the second node, within the limits of the geometric entities that own the nodes. This is also done without respect for element quality.

And example of this is given as follows:

brick x 10
volume 1 copy move 11
surface all except 10 6 vis off
transparent
graphics perspective off
at 5.552503 3.832384 0.134127
from 34.651051 3.640138 -0.193121
up 0.006514 0.999945 -0.008172

mesh surface all
surface 6 smooth scheme randomize free
smooth surface 6
node 432 move 0 0 -0.2
align mesh node 944 node 432
node 432 move 0 0 0.4
align mesh curve 23 closeto curve 12
align mesh surf 10 closeto surf 6

5.6.3 Block Repositioning

A capability to reposition blocks is provided. This capability will retain all the current connectivity of the nodes involved. Unlike the Nodeset Move command, this command works for blocks containing free mesh (mesh not owned by geometry.)

Block <id_range> Move <delta_x><delta_y><delta_z>

5.6.4 Collapsing Mesh

CUBIT currently offers several options for modifying an existing finite element mesh. Triangle and tetrahedral meshes sometimes contain low quality elements that can be removed by the following operations.

5.6.4.1 Collapsing Mesh Using Quality Metrics

The following first two commands collapse triangles, while the third collapses tetrahedra. Collapses are performed only if the collapse operation does not cause worse quality in the surrounding, surviving mesh; otherwise the collapse is not performed. The collapse operation removes the element by consolidating two neighbor nodes of the specified mesh entity into one, to either node location or their midpoint. The specified metric is used to determine quality, the default being Scaled Jacobian.

Collapse Edge <ids> [SCALED JACOBIAN|Aspect Ratio|Shape|Shape and Size]

Collapse Tri <ids> [SCALED JACOBIAN|Aspect Ratio|Shape|Shape and Size]

Collapse Tet <ids> [Altitude|Aspect Ratio|Aspect Ratio Gam|Distortion|Inradius|Jacobian|Normalized Inradius|Node Distance|SCALED JACOBIAN|Shape|Shape and Size|Timestep]

collapse_mesh.png

Figure 378: Before and After Triangle/Edge Collapse

5.6.4.2 Collapsing Mesh Manually

The following command collapses triangles containing the given edge, with no regard for quality.

Meshedit Collapse edge <id> [keep node <id>] [compress_ids]

This command only works on triangle surface meshes. If volumetric elements, or quads, are attached to the edge, the command fails. The keep node option control which node to collapse to. The option compress_ids compresses holes in the mesh id space caused by the collapse.

Combining nodes to collapse tetrahedra can be done with the following command. The first node specified is merged into (deleted) the second node. If the first node cannot be moved due to geometry constraints (it’s owned by a vertex), the operation fails. This command is behind a developer flag so set dev on must be issued before use.

Merge Node <id> <id>

5.6.4.3 Removing Overconstrianed Tets

Cubit offers commands to remove overconstrained tetrahedra - tets containing two triangles on the same surface and all four corner nodes on surfaces, curves, or vertices. These tets are not amenable to smoothing leaving removal as the only viable solution to improve quality.

Remove Overconstrained Tet <ids>

The tets are deleted and the two back sides become surface triangles. If the tets have mid-edge nodes, the back mid-edge nodes are snapped to the surface. If this removal operation generates worse quality (aspect ratio) than in the tet removed, the operation is not performed. Figure 379 shows before and after image of removing overconstrained tets.

remove_oc_tets.png

Figure 379: Before and After Removing Overconstrained Tets

5.6.5 Creating and Merging Mesh Elements

The following forms of the create and merge commands operate on meshed entities only. They allow low-level editing of meshes to make minor corrections to a mostly correct mesh. They are not designed for major modifications to existing meshes. Because Cubit’ display routines were not designed with these type of operations in mind, these commands may cause the current display of the affected entities to take an unexpected form. An appropriate drawing command can be used to return the display to the desired view.

The delete commands for deleting individual elements are still under development, but they may be used after setting a developer flag.

5.6.5.1 Creating Mesh Elements

The create command uses existing mesh nodes to create new mesh entities.

5.6.5.1.1 Creating Hex and Tet Elements

To create hex and tet elements using existing mesh nodes

  1. On the Command Panel, click on Mesh.

  2. Click on Hex or Tet.

  3. Click on the Create action button.

  4. Enter the appropriate value for each Node ID.

  5. Enter the appropriate value for Volume ID. This can also be done using the Pick Widget function.

  6. Click Apply.

Create {Hex|Tet} Node <range> [Owner Volume <id>]

Using the nodes specified, this form of the command creates a new hex or tet that will be owned by the specified volume. For a hex, 8 nodes are required. The order in which the nodes are specified is very important. They should describe two opposing faces of the hex; the normal of the first face should point into the hex and the normal of the second face should point out of the hex. For example, to create the hex shown in Figure 380 below, the following command would be entered:

create hex node 1,2,3,4,5,6,7,8 owner volume 1

Figure 380: Node Numbering for the Create Hex command

To create a tet, 4 nodes are specified. The base is specified as a tri with the normal point toward the fourth node using the right hand rule. To create the tet shown in Figure 381, the following command would be entered:

create tet node 1,2,3,4 owner volume 1

Figure 381: Node ordering for Create Tet Command

5.6.5.1.2 Creating Wedge Elements

Create Wedge Node <range> [Owner Volume <id>]

To create a wedge, 6 nodes are specified. The base is specified as a tri with the normal pointing inward using the right hand rule. To create the wedge shown in Figure 382, the following command would be entered:

create wedge node 1,2,3,4,5,6 owner volume 1

Figure 382: Node ordering for Create Wedge Command

5.6.5.1.3 Creating Face and Tri Elements

To create quad and tri elements using existing mesh nodes

  1. On the Command Panel, click on Mesh.

  2. Click on Quad or Tri.

  3. Click on the Create action button.

  4. Select Single Element from the drop-down menu.

  5. Enter the appropriate value for each Node ID.

  6. Enter the appropriate value for Volume ID. This can also be done using the Pick Widget function.

  7. Click Apply.

Create {Face|Tri} Node <range> [Owner {Volume|Surface} <id>]

The next form of the command creates a face or tri that will be owned by the specified volume or surface. Four nodes are specified for a face, three nodes for a tri. The nodes should be specified in the order needed to produce a face or tri with the normal in the desired direction using the right hand rule.

5.6.5.1.4 Creating Edge Elements

To create edge elements using existing mesh nodes

  1. On the Command Panel, click on Mesh.

  2. Click on Edge.

  3. Click on the Create action button.

  4. Select Single Element from the drop-down menu.

  5. Enter the appropriate value for each Node ID.

  6. Enter the appropriate value for Volume ID. This can also be done using the Pick Widget function.

  7. Click Apply.

Create Edge Node <range> [Owner {Volume|Surface|Curve} <id>]

This form of the command creates an edge that will be owned by the specified volume, surface, or curve. Two nodes must be specified; order is unimportant.

5.6.5.1.5 Creating Nodes

To create a node by specifying the location

  1. On the Command Panel, click on Mesh and then Node.

  2. Click on the Create action button.

  3. Specify the X, Y and Z Coordinates.

  4. Choose a Node Owner by selecting Volume, Surface, Curve or Vertex from the Node Owner drop-down menu.

  5. Enter the appropriate value for the selected Node Owner. This can also be done using the Pick Widget function.

  6. Click Apply.

Create Node Location <x> <y> <z> Owner {Volume|Surface|Curve|Vertex} <id>

The last form of the command creates a node at the specified location that will be owned by the specified volume, surface, curve, or vertex. The location is specified by three absolute values that represent the position of the node in 3D space.

5.6.5.2 Merging Nodes

The merge node command is used to join two mesh entities one node at a time. It should be used with care because merging nodes of different meshed entities may have unpredictable results. The syntax is:

Merge Node <id1> <id2>

The merge node command replaces the node specified as id1 with the node id2. The command is equivalent to deleting node id1 and creating node id2 in the same location. The resultant merged node takes on the characteristics of the replaced node such as position and owner. This may include some or all of the higher level mesh entities related to the merged node.

Caution should be taken when using the merge node command because other commands involving the related meshed entities may not work properly following the merge.

5.6.6 Edge Swapping

The edge swap command allows a user to target a specific edge between two triangles (similar functionality for quads and tets has not been included) and change the connectivity of the triangles.Multiple edges can be swapped simultaneously. The input order of the edges is the order in which the swaps will be performed.

Typically, the edge swap command is used to specifically repair local mesh connectivity.

Swap Edge <id_list>

The following images show the before and after views of a model where the highlighted edge is swapped. The edge in each image is the same edge.

Figure 383:

Image 1 - Before edge swapping

Figure 384:

Image 2 - After edge swapping

5.6.7 Matching Tetrahedral Meshes

The intended use of this function is for importing two exodus or genesis files that have non-conforming mesh where they touch and modifying the meshes locally to make them conforming.The result is a single mesh that is stitched together at the locally modified region. This functionality is currently only available for tetrahedral meshes.

Tetrahedral mesh matching will work on free mesh only.The interface where the two meshes will be matched need not be planar.A single target sideset and one or more source sidesets should be provided. The source sideset should be completely enclosed in the target sideset so that the boundaries of the two sidesets do not intersect. The two meshes need not touch exactly at the sidesets but the closer the meshes are to touching the better the results will be.Small gaps or overlaps will generally be allowed.Both of the meshes involved in the matching should be contained in defined blocks prior to issuing the command.

The syntax for the command is:

Meshmatch tet sideset <id_list> onto sideset <id>


The one or more sidesets specified before the onto keyword are the source sideset(s). The sideset after the onto keyword is the target sideset.

5.6.8 Mesh Cleanup

Once a mesh has been created or imported, Cubit has tools to both manually and automatically improve the quality of a mesh. Mesh Cleanup is the name for the automatic tools which automatically find bad elements and fixes them by both recomputing node locations (i.e. smoothing) AND redefining the local element connectivity. To automatically cleanup a mesh, use the following command:

Cleanup {Volume|Block <id_range>} [angle <value=150>]

This command will cleanup either a tet or a hex mesh as described below.

5.6.8.1 Cleaning Up a Tetrahedral Mesh

An alternative to the remesh command for tetrahedral meshes is the cleanup command. For this command the existing mesh is validated and "optimized" by the tetmesher, instead of being deleted and replaced with a different mesh.

To cleanup a tetrahedral volume mesh use the following command:

Cleanup {Volume|Block} <id_range>

A second variation of the Cleanup command allows remeshing of tetrahedra that are either part of a free mesh (not owned by a volume) or are a subset of the tetrahedra in the volume. The command is:

cleanup tet <id_range> [free]

For example, the command

cleanup tet all free

will gather all tetrahedra in a free mesh or single volume, generate a triangle boundary surface, and "optimize" the mesh, ignoring any volume or blocks. Without the optional free keyword, the tets will be processed volume by volume or block by block retaining the boundary between adjacent volumes or blocks.

Also, the command

cleanup tet 200 to 300

will gather the tetrahedra in the range [200, 300], generate a triangle boundary surface, and "optimize" the mesh. If the tetrahedra in the range are disjointed, i.e., multiple, independent sets, this operation may fail. It is best to specify a contiguous set of elements.

Note: Cubit will issue an error if the tetrahedra are owned by more than one volume or mesh container.

5.6.8.2 Cleaning Up a Hexahedral Mesh

The command to cleanup a hex mesh is:

Cleanup Volume <id_range> [angle <value=150>]

The GUI Command panel is accessed via Mesh/Volume/Mesh Cleanup:

Figure 385:

Hexahedral mesh cleanup is newer to Cubit and currently only a single type of bad element is found and fixed. The hex mesh quality configuration that is currently implemented is when a column of hex elements is on the boundary of a volume, the hexes in the column each have 2 adjacent quad faces on the boundary, and the dihedral angle between those 2 faces is greater than the specified angle tolerance. This situation is illustrated in Figure 386 where the red column of hexahedra has a good angle on the source surface, which flattens out to 180 degree angle on the target creating inverted hex elements. The angle parameter determines how large the angle can get before being cleaned up.

Figure 386: Example of hexahedral mesh with case handled by hex mesh cleanup.

Figure 387 illustrates the result of hex mesh cleanup. Internally, Cubit finds the column of hexahedra with the bad elements, as well as an adjacent column of hexahedra, and then automatically performs some hex column operations followed by smoothing to improve the quality of the elements locally.

Figure 387: The mesh from Figure 386 after hex mesh cleanup.

5.6.9 Mesh Coarsening
5.6.9.1 Hexahedral Coarsening

Cubit provides a limited number of options for coarsening hexahedral meshes. The options currently available for hex coarsening rely on the hex sheet extraction process described in Mesh Refinement page. Removing a sheet from a hexahedral mesh essentially means that a complete layer of hexes will be removed and the adjacent layers expanded to take its place.

5.6.9.1.1 Extracting a Single Hex Sheet

The following command can be used to extract a single hex sheet.

Extract sheet { Edge <id> | Node <id_1> <id_2> }

The edge or node pair are used to define the sheet that will be extracted. Figure 388 below shows an example of extracting a hex sheet. In this example the hex sheet is specified by the node pair highlighted in the images. Note that the entire layer of hexes between the highlighted nodes has been removed and the neighboring layers have been expanded to take its place.

coarsen_1.gifcoarsen_2.gif

Figure 388: Example of Hex Sheet Extraction

Note: Also see the Mesh Refinement section for a description of hex sheet drawing.

5.6.9.1.2 Extracting multiple sheets along a curve

Another option for extracting hex sheets can be done by specifying a curve at which to perform the sheet extraction operations. In this case, multiple layers of hexes can be removed by specifying a curve perpendicular to the hex layers. The command for coarsening perpendicular to a curve is as follows:

Coarsen Mesh Curve <id> Factor <value> [NO_SMOOTH|smooth]

Coarsen Mesh Curve <id> Remove {<num_edges>|edge <id_ranges>} [NO_SMOOTH|smooth]

coarsen_curve0.gifcoarsen_curve1.gif

Figure 389: Coarsening a mesh by extracting sheets perpendicular to a curve

The first option uses the factor argument. The factor argument controls how much larger the edges will be on the curve. For example, Figure 389 shows the coarsen mesh curve command used with a factor of 2. In this case, the command attempts to make the mesh edges approximately twice the length relative to their original length along the curve.

The second option uses the remove argument. With this option, a specified number of layers may be removed from the mesh. This may be accomplished by indicating an exact number, or by providing a list of edge IDs that correspond to the layers that will be removed.

The NO_SMOOTH|smooth option allows the user to improve the element quality after the sheet extraction process by smoothing the remaining nodes. The default for both of these commands is to not smooth. Smoothing may also be accomplished after sheet extraction by using the smooth volume command.

5.6.9.1.3 Uniform hex coarsening

By applying the coarsen mesh curve command multiple times to curves that are orthogonal in the model, the effect of uniform coarsening of the mesh may be achieved.

5.6.10 Mesh Column Operations

Column operations allow users direct control over the mesh connectivity while maintaining full-geometric associativity. Often, hex meshing schemes such as sweeping and mapping result in mesh topology forced into unnatural shapes, such as a square shaped source surface mesh getting swept into a circular target surface. Often forcing meshes into shapes like this results in poor element quality because of non-optimal element angles. The Column commands allow users to directly modify mesh topology to make minor tweaks to a mesh improving element quality. Column operations are almost always followed by smoothing to enable element quality improvement. Cubit provides tools to perform insertion, deletion, swapping, grouping, and drawing of hex columns.

5.6.10.1 Column Insertion

A single column can be inserted into the mesh by using the following command:

column open node <center node id> <orientation node ids>

For example, given the following meshed brick:

Figure 390:

we issue the command, column open node 89 88 90 , to get this result:

Figure 391:

5.6.10.2 Column Deletion

Columns can be removed with neighboring columns being joined together using collapse commands. Collapse commands are of two types: interior and boundary.

For interior node collapse, the two nodes which are opposite on a face are combined together. The column associated with the face is removed. Use the following command:

column collapse node <opposite node ids>

For example, given the following meshed brick:

Figure 392:

we issue the command, column collapse node 51 59, to get this result:

Figure 393:

The column collapse command can be used with boundary nodes. For example, we issue the command, column collapse boundary node 13 2 11, to get this result:

Figure 394:

5.6.10.3 Column Swapping

Faces between two hex columns can be swapped using the following command:

column swap node <old edge node ids> <new edge node ids>

For example, given the following meshed brick:

Figure 395:

we issue the command, column swap node 103 94 102 18, to get this result:

Figure 396:

5.6.10.4 Column Groups

A group consisting of hexes that comprise a column can be created using the following command:

column { face <id> | edge <id1> <id2> | hex <id1> <id2> } group

5.6.10.5 Drawing Columns

Columns can be drawn using the following command:

draw column { face <id> | edge <id1> <id2> | hex <id1> <id2>}


5.6.11 Mesh Refinement

Cubit provides several methods for conformally refining an existing mesh. Conformal mesh refinement does not leave hanging nodes in the mesh after refinement operations, rather conformal mesh refinement provides transition elements to the existing mesh. Both local and global mesh refinement operations are provided.

5.6.11.1 Global Mesh Refinement

The Refine Surface and Refine Volume commands provide capability for globally refining an entire surface or volume mesh. Global refinement will only be used if the entire body is included in the command. Otherwise, the command will be interpreted as local refinement (see below.) This distinction can be important because the global refinement algorithm divides each element into fewer sub-elements than local refinement. The command syntax is:

Refine Volume <range> numsplit <int>

Refine Surface <range> numsplit <int>

The numsplit option specifies how many times to subdivide an element. A value of 1 will split every triangle and quadrilateral into four pieces, and every tetrahedron and hexahedron into eight pieces. Examples of global refinement on each element are shown below.

original mesh

NumSplit = 1

NumSplit = 2

original mesh

NumSplit = 1

NumSplit = 2

original mesh

NumSplit = 1

NumSplit = 2

original mesh

NumSplit = 1

NumSplit = 2

Figure 397: Example of uniform refinement for each of the mesh entities

5.6.11.2 Refining at a Geometric or Mesh Feature

Cubit also provides methods for local refinement around geometric or mesh features. Individual elements or groups of elements can be refined in this manner using the following syntax.

Refine {Node|Edge|Tri|Face|Tet|Hex} <range>
[NumSplit<int = 1>|Size <double> [Bias <double>]]
[Depth <int>|Radius <double>] [Sizing_Function]
[Smooth]

Refine {Vertex|Curve|Surface} <range>
NumSplit<int = 1>|Size <double> [Bias <double>]]
[Depth <int>|Radius <double>] [Sizing_Function]
[Smooth]

To use these commands, first select mesh or geometric entities at which you would like to perform refinement. Refinement will be applied to all mesh entities associated with or within proximity of the entities. The all keyword may be used to uniformly refine all elements in the model

The following is a description of refinement options.

Numsplit

Defines the number of times the refinement operation will be applied to the elements in the refinement region. For uniform or global refinement, where all elements in the model are to be refined, A NumSplit value of 1 will split each triangle and quadrilateral into four elements, and each tetrahedron and hexahedraon into eight elements. A numsplit of 2 would result in 9 and 27 elements respectively. For uniform refinement, the total number of elements obeys the following:

NE = NI * (numsplit + 1)^dim

where NE is the final number of elements, NI is the initial number of elements and dim is 2 or 3 for 2D and 3D elements respectively.

In cases where only a portion of the elements are selected for refinement, the elements at the boundary between the refined and non-refined elements will be split to accommodate a transition in element size. The transition pattern will vary depending on the local features and surrounding elements. For non-uniform refinement of hexahedron, for a numsplit of 1, each element in the uniform refinement zone will be subdivided into 27 elements rather than 8. This affords greater flexibility in transitioning between the refined and unrefined elements.

Size, Bias

The Size and Bias options are useful when a specific element size is desired at a known location. This might be used for locally refining around a vertex or curve. The Bias argument can be used with the Size option to define the rate at which the element sizes will change to meet the existing element sizes on the model. Figure 398 shows an example of using the Size and Bias options around a vertex. Valid input values for Bias are greater than 1.0 and represent the maximum change in element size from one element to the next. Since refinement is a discrete operation, the Size and Bias options can only approximate the desired input values. This may cause apparent discontinuities in the element sizes. Using the default smooth option can lessen this effect. It should also be noted that the Size option is exclusive of the NumSplit option. Either NumSplit or Size can be specified, but not both.

original mesh

Bias=2.0

Bias=1.5

Figure 398: Example of using the Size and Bias options at a Vertex.

Depth

The Depth option permits the user to specify how many elements away from the specified entity will also be refined. Default Depth is 1. Figure 399 shows an example of using the depth option when refining at a node.

original mesh

Depth=1

Depth=2

Figure 399: Example of using the Depth option at a node to control how far from the node to propagate the refinement.

Radius

Instead of specifying the number of elements to describe how far to propagate the refinement, a real Radius may be entered. The effects of the Radius are similar to that shown in Figure 3, except that the elements whose centroid fall within the specified Radius will be refined. Transition elements are inserted outside of this region to transition to the existing elements.

Sizing Function

Refinement may also be controlled by a sizing function. Cubit uses sizing functions to control the local density of a mesh. Various options for setting up a sizing function are provided, including importing scalar field data from an exodus file. In order to use this option, a sizing function must first be specified on the surface or volume on which the refinement will be applied. See Adaptive Meshing for a description of how to define a sizing function.

Smooth

The default mode for refinement operations is to NOT perform smoothing after splitting the elements. In many cases, it may be necessary to perform smoothing on the model to improve quality. The smooth option provides this capability.

Controlling Regularity of Triangle Refinement

The default behavior of triangle refinement is to attempt to maximize element quality using the basic one->four template. This can sometimes result in an irregular pattern, where one or more edges are swapped. To enforce regularity of the triangle refinement pattern, regardless of quality, the folowing setting may be used.

Set Triangle Refine Regular {on|OFF}

5.6.11.3 Hexahedral Refinement Using Sheet Insertion

Several tools for refining a hexahedral mesh using sheet insertion and deletion are available in Cubit.

5.6.11.3.1 Refining at a Geometric Feature

The following commands offer additional controls on refinement with respect to one or more geometric features of the model.

An existing hexahedral mesh can be refined at a geometric feature using the following command:

Refine Mesh Volume <id> Feature {Surface | Curve | Vertex | Node} <id_range> Interval <integer>

This command refines the mesh around a given feature by adding sheets of hexes.These sheets can be generalized as planes for surfaces, cylinders for curves, and spheres for vertices. The interval keyword specifies the number of intervals away from the feature to insert the new sheet of hexes.For this command a single sheet of hexes is inserted into the hexahedral mesh.

Figure 400 shows an example of this command where the feature at which refinement is to be performed is a curve. In this case the interval chosen was, 2. This indicated that the elements 2 intervals away from the curve would be refined.

Figure 400: Example of Refinement at a curve

5.6.11.3.2 Refining along a path

Hexahedral meshes can be refined from a specific node and along a propagated path using the following command

Refine Mesh Start Node <id> Direction Edge <id> End Node <id> [Smooth]

Figure 401 shows a swept mesh and its cross section. The cross section view on the left shows a path that has been propagated through the mesh between the start node and end node. This path is then projected along a chain of edges in the direction given by the direction edge as shown in Figure 401 . The start node and end node must be on the same sweep layer. This refinement procedure also requires the volume’s meshing scheme to be set to sweep. If the smooth keyword is given the mesh will be smoothed after the refinement step is complete.

Figure 401: Refining a Mesh Along a Path

5.6.11.3.3 Refining a Hex Sheet

The following command can be used to refine the elements in one or more hex sheets:

Refine Mesh Sheet [Intersect] { Node <id_1> <id_2> | Edge <id_range> } { Factor <double> | Greater_than <size> } [Smooth] [in volume <id_range> [depth <num_layers]]

The node and edge keywords are used to define the hex sheet(s) to be refined. If the node option is chosen, only one node pair can be entered (see Figure 402). If the edge option is chosen, one or more edges can be entered (see Figure 403).

Figure 402: Refine mesh sheet node 796 782 greater_than 6

Figure 403: Refine mesh sheet edge 1584 1564 1533 1502 1471 greater_than 6


The factor and greater_than keywords are used to specify the refinement criteria for the selected hex sheet(s). If the factor keyword is used, the length of the smallest edge in the hex sheet is determined and any edge in the hex sheet with a length greater than the smallest length multiplied by the factor is refined. If the greater_than keyword is used, any edge in the hex sheet with a length greater than the specified size is refined.

The intersect keyword is optional. It is used to more easily define multiple hex sheets to be refined. If the intersect keyword is entered, the node and edge keywords are used to define a chord rather than a sheet (a chord is the two-dimensional equivalent of the three-dimensional sheet). The chord will be limited to the surface(s) associated with the nodes or edge entered, and all sheets intersecting the chord will be selected for refinement (see Figure 404). When the node keyword is used with the intersect option, the nodes must define an edge on the surface of the mesh.

Figure 404: Refine mesh sheet intersect edge 1499 greater_than 6

The smooth keyword is also optional. When the smooth keyword is entered, the elements that have been refined are smoothed in an attempt to improve element quality. Figure 405 shows the same command as Figure 404 with the addition of the smooth keyword. Smoothing may or may not be beneficial, depending on the situation.

Figure 405: Refine mesh sheet intersect edge 1499 greater_than 6 smooth

5.6.11.3.4 Directional Refinement

Mesh sheet refinement can also be used to refine a mesh in a particular direction.This can help control anisotropy.The following command can be used as a short cut for specifying what sheets should be used in refinement.

Refine Volumes <id_range> using {Plane <options> | Surface <id_range> | Curve <id_range> } [ Depth <num_layers> ] [ Smooth ]

The volumes specified indicate which hexes can be refined. A transition layer will be made out of hexes surrounding the indicated volumes. If the depth option is used, additional layers of hexes around the specified volumes will be included in the refinement region. Behind the using option, if the plane option is employed, all the edges in the volume which are parallel to the plane (to a small tolerance) are used to specify the sheets to refine. If the surface or curve option is employed instead, all the edges in the surfaces or curves will be used.

For example, Figure 406 and 11 shows directional refinement using the plane option. The command used to convert the mesh in Figure 406 to Figure 407 is:

refine vol 2 using plane xplane depth 1

Figure 406: Starting mesh

Figure 407: Directional result of refinement resulting from using the plane option on the refinement command.

Directional refinement can be used iteratively to reduce or create anisotropy of any level. This is done by applying the direction refinement command iteratively. A second iteration of directional refinement can be applied by issuing the same command again. To improve element quality, however, it is often recommended to perform refinement parallel to the plane before subsequent iterations. For example, taking the mesh in Figure 407 as input, the following commands will generate the mesh in Figure 408.

refine mesh sheet edge ( at 4.5 5 5 ordinal 1 ) factor 0

refine vol 2 using plane xplane depth 1

Figure 408: A 2nd iteration of direction refinement is applied.

5.6.11.3.5 Hex Sheet Drawing

Since refinement of hex meshes generally occurs by inserting hex sheets, tools have been provided to draw a specified sheet or group of sheets.

This command draws a sheet of hexes that is defined by the edge or node pair.

Draw Sheet {Edge <id> |Node <id_1> <id_2>}[Mesh [List]] [Color <color_name>] [Gradient]

The following command draws the three sheets that intersect to define the given hex. These sheets are drawn green, yellow, and red. To draw a specific sheet, list its color in the command.

Draw Sheet Hex <id> [Green][Yellow][Red][Mesh [List]] [Gradient]

The ’gradient’ keyword for both commands draws the sheet in gradient shading according to the distance between opposite hex faces that are parallel to the sheet.

The ’mesh’ keyword will draw the hexes in the hex sheet. If the ’list’ keyword is also given, the ids of the hexes in the sheet will be listed.

5.6.11.4 Local Refinement of Tets, Triangles, and Edges

Local refinement of tets, triangles, and edges is available by refining individual entities or by refining to guarantee a user-specified number of tests through the thickness:

5.6.11.4.1 Single Entity Refinement

Local refinement of tets, triangles, and edges is available. When refining triangles a node is inserted at the enter of the triangle and three new triangles are connected to this node. The original triangle is deleted. The command to refine triangles is:

Refine Local Tri <tri_id_list>

When refining an edge, a node splits the original edge between two triangles and four new triangles are created and connected to the new node. The command to refine an edge is:

Refine Local Edge <edge_id>

When refining a tet edge, the tet edge is split by a node and then all tets attached to the original edge are split into two through a triangle that goes through the new node. All other adjacent nodes and edges are unmodified by the operation. Note that on the interior of the mesh tet edges are not represented explicitly so the command takes two nodes as input to define the edge. The command to refine a tet edge is:

Refine Tet_edge Node <node1_id> <node2_id>

5.6.11.4.2 ’N’ Tets Through the Thickness Refinement

Cubit provides a capability to guarantee a user-specified number of tets through the thickness. This functionality is intended to work on an existing tet mesh using mesh refinement. The user specifies the geometry or mesh defining the thin region and also the number of desired tets through the thickness and the refinement algorithm will run until it meets this criteria. The number of tets through the thickness in this context is interpreted as the number of mesh edges through the thickness and the algorithm will continue to do refinement until there are no mesh edge paths through the thin region that contain fewer mesh edges than the number specified by the user. The command for doing this is:

Refine min_through_thickness <val> source {surface|node|tri|nodeset|sideset|block} <id_range> target {surface|node|tri|nodeset|sideset|block} <id_range> [anisotropic] [single_iteration] [dont_fill_in_gaps]

The various options are described below.

anisotropic: When this option is specified in the command the algorithm will only attempt to refine the edges that go roughly normal to the source and target entities. This will give an anisotropic result. The meshes on the source and target will generally not be affected when this option is used. When this option is not specified the refinement algorithm will be isotropic in nature and will propagate much more. However, it will tend to have better transitioning from the refined region to the non-refined regions.

dont_fill_in_gaps: When this option is specified in the command the algorithm will NOT try to grow the regions that will be refined. When the regions are grown it helps to avoid leaving small pockets of mesh that are not refined (splotchiness). This has effect only on isotropic refinement (when the "anisotropic" option is NOT used).

single_iteration: When this option is specified in the command the algorithm will only run for one iteration even if the min_through_thickness criteria is not met.

Below is an example using the following commands:

refine min_through_thickness 4 source surf 1 target surf 2 anisotropic

refine min_through_thickness 4 source surf 7 target surf 13 3 14 anisotropic

Surfaces 1 and 2 are the two surfaces on opposite sides of the thin region in the green volume and surfaces 7 13 3 14 are the surfaces on opposite sides of the thin region in the yellow volume.

Figure 409: Before N through the thickness refinement.

Figure 410: After N through the thickness refinement.

5.6.11.5 Parallel Refinement

Global mesh refinement can be used to increase global mesh density with a single command. If an extremely large mesh is desired, one approach is to generate a coarse mesh with the desired relative mesh gradations, and then perform global mesh refinement to scale the number of elements up across the model. Depending on the amount of refinement requested, this can exceed the memory limits of Cubit running on a single processor. Global parallel mesh refinement allows refinement to go beyond the memory limits of a single processor. The resulting mesh size is only limited by the number of processors you have available to perform the refinement. The command syntax is:

Refine Parallel [Fileroot <’root filename’>] [Overwrite] [No_geom] [No_execute] [Processors <int>] [Numsplit <int>] [Version <’Sierra version’>]

This command causes Cubit to write two files to disk. First, Cubit writes an Exodus file named <root filename>.in.e which contains the mesh elements in the current Cubit session. Second, Cubit writes an OpenNURBS 3dm file http://www.opennurbs.org . named .3dm, which contains a definition of the geometry from the current Cubit Session. The fileroot argument specifies the full path and root of the files that will be written. Additional blocks are written to the Exodus file to correspond to the geometry entities in the 3dm file. The overwrite argument specifies if existing files on disk with the same names should be overwritten or not.

When the mesh is refined in STK_Adapt, the new nodes created during refinement will be projected to the geometry definitions from the OpenNURBS file. If the no_geom argument is specified, only the Exodus file is written, and new nodes will be placed by evaluating the shape functions of the elements being evaluated.

The exported Exodus and OpenNURBS files are prepared specifically for input into the Sierra STK_Adapt program. By default, Cubit spawns STK_Adapt in the background after exporting the files. If the no_execute argument is specified, the Cubit command exports the files, but does not spawn STK_Adapt. The user can then move those files to a large parallel machine to perform the STK_Adapt refinement.

If no_execute is not specified, then Cubit will spawn Sierra STK_Adapt in the background to perform the refinement. The processors argument specifies the number of processors to use for the STK_Adapt run. The numsplit argument specifies how many times the global refinement should be performed. If numsplit = 1, then each element edge is split into 2 sub-edges. If numsplit = 2, then each element is split into 4 sub-edges, etc. The optional version argument allows the user to specify which version of STK_Adapt should be run. Possible values for version include "head", "4.22.0", etc.

Refine parallel command creates groups to visualize the association between mesh entities (edge, tri, and quads ) and geometric entities (curves & surfaces). There are three types of groups that exist for each mesh entity type edge, tri, and quad. First group contains unique 1-1 map between mesh entity and geometric entity. Note that issuing "Debug 212" command before calling the refine parallel command, will create separate group for each geometric entity containing unique mesh entities. Next group contains mesh entities that point to multiple geometric entities. And the final group contains mesh entities not associated with any geometric entity.

After the Refine Parallel command finishes, the mesh in Cubit does not change, normally because the resulting mesh would be too big to store in Cubit on a single processor. Instead, the refined mesh is written to disk in a series of Exodus files, one per processor, using the fileroot argument as the root of the Exodus file names. For example, if fileroot is somemesh and processors is 8, STK_Adapt will write out eight Exodus files named somemesh.e.8.0, somemesh.e.8.1, ..., somemesh.e.8.7. These files can be kept distributed for an analysis run, or united using the Sierra EPU command. In this example, Cubit would have written out a file called somemesh.in.e, which contains all of the sideset, nodeset, and block definitions defined in the Cubit session. All of these sidesets, nodesets and blocks are transferred to the refined exodus files (somemesh.e.8.0, etc.) for use in the subsequent analysis. The somemesh.e.* files will also contain several other blocks which correspond to geometric entities defined in somemesh.3dm to enable the mesh to be refined to the CAD geometry, and should be ignored by downstream applications.

Sierra STK_Adapt must be in the PATH on the computer Cubit is running on. If Sierra STK_Adapt cannot be found, Cubit returns an error and no refinement is performed. Information on how to download and build Sierra STK_Adapt can be found at https://github.com/trilinos/Trilinos/tree/master/packages/stk/ .

5.6.12 Mesh Scaling for Flexible Hex Refinement

Mesh Scaling is a tool to globally refine or coarsen a hexahedral mesh. (It only works on all-hex meshes.) Mesh Scaling is more flexible than template-based global refinement methods, because it does not require that every element is refined, or refined in the same way. Instead, Mesh Scaling decomposes the entire mesh into larger "blocks" of hexes, and then refines the blocks. In this way, Mesh Scaling supports increasing the element count by small multiplicative factors, e.g. 1.5, that are impossible with template based refinement. However, like template refinement, it can ensure that every location of the mesh is refined. These features can be useful for solution verification.

Mesh Scaling allows a series of meshes to be built for solution convergence studies, or other purposes. Each mesh has similar structure but progressively smaller elements. For example, if the input mesh has 10,000 hexahedra, scaling with a multiplier of 2.0 will result in a mesh of about 20,000 hexahedra, with approximately the same element orientation and size gradations as the original. Additional meshes can be built by scaling the original mesh with multipliers of 4, 6, 8, etc. Convergence studies can be performed with much less computational cost than if traditional global refinement is used, because the element increase at each step of the series can be smaller.

A traditional template-based refinement replaces each hexahedron with a 2x2x2 structured grid of hexahedra, increasing the element count by a factor of 8X. In contrast, Mesh Scaling refines "blocks" of elements (not to be confused with Exodus element blocks). The block decomposition subdivides the entire mesh into structured (mapped) and swept blocks. A block may contain many elements, but is not allowed to cross geometric boundaries, boundary conditions, and loading constraints. For example, a block cannot have a curve or nodeset in its interior, nor hexes from multiple Exodus blocks. Blocks may be structured or logical sweeps. A structured block is restricted to be a grid of MxNxO hexes, so, its extent is limited by any surface nodes that do not have exactly four edges, etc. Mesh Scaling remeshes the entire model conforming to the block decomposition, using the original mesh as a sizing function, multiplied by the scale factor.

The syntax to scale a mesh in Cubit is:

scale mesh [volume <ids>]
[multiplier <value, default=2.0>]
[minimum <value, default=1>]
[{SWEPT_BLOCKS | legacy | maintain_structure}]
[feature_angle <value>]
[force_structured in {[volume <ids>] [surface <ids>]}]
[thin_gap_intervals <value, default=2>] [fix_all_gaps]
[max_aspect_ratio <value> in volume <ids>]
[max_feature_length <value, default=30>]
[smooth_volume {ON|off}]

The GUI command panel for this command can be found under Mesh/Volume/Refine/Mesh Scaling.

Figure 411:

5.6.12.1 Command Options

scale mesh [volume <ids>]

Specifying a list of volumes is optional. By default, all volumes will be scaled. Otherwise, the specified volumes, together with any volumes merged with them, will be scaled. This allows scaling of individual assembly components, without scaling the entire model.

[multiplier <value, default=2.0>]

The target number of output hexes is the number of input hexes times the multiplier parameter. The default value is 2.0. For example: the mesh in Figure 412 has 3025 hex elements. After scaling by 2.0, the mesh in Figure 413 has 6804 hexes. Note the locations of new nodes are projected to lie on the associated CAD geometry, if any.

Figure 412: Input mesh for Mesh Scaling. The mesh contains 3025 hex elements.

Figure 413: The mesh from Figure 412 scaled with the command "Scale Mesh Multi 2". The resulting mesh contains 6804 hex elements.

[minimum <value, default=1>]

The minimum parameter provides further control over the level of refinement. It is the minimum number of intervals added to each block-curve. Specifying minimum 1, which is the default, will guarantee that at least one interval is added to every element block in all 3 directions, which guarantees every part of the domain is scaled by at least a little bit. This can be "turned off" by specifying minimum 0.

5.6.12.1.1 Refinement and Coarsening Levels

The multiplier determines the target number of output hexes. There is no guarantee it will be achieved exactly. Mesh Scaling will output at least multiplier*n hexes, where n is the number of input hexes. For minimum 0 and small multipliers there is no guarantee that every block will be refined in all 3 directions. This is because the target number of elements may be reached first. This may lead to unevenly distributed refinement with jumps in adjacent element sizes.

An uneven distribution may also result if adjacent blocks have significantly different MxNxO intervals; this is common with the legacy option. For example, for a 1x10x12 block adjacent to a 6x10x12 block, Mesh Scaling could output 2x11x13 and 7x11x13 blocks. The M value of the first block has doubled, 2/1, while the M value of the second block has only increased by 7/6. Thus, the user may observe a jump in the lengths of adjacent edges.

To coarsen a mesh, specify a multiplier less than one. Mesh scaling will output at most multiplier*n hexes. For example, a multiplier of 0.9 will attempt to decrease the element count by 10%. Each block side will have its intervals decreased by the minimum value. A block must have at least one interval, so how far the mesh can be coarsened is limited by the distance between mesh irregularities, geometry, boundary condition and loading constraints.

5.6.12.1.2 Solution Verification

Mesh Scaling is useful for solution verification, as it can easily generate a series of similar meshes of increasing mesh density. For best results, generate each mesh in the series by scaling the original mesh, rather than scaling the previous mesh of the series. It is suggested that each mesh uses a multiplier at least 2X larger, and a minimum at least one more, than the prior mesh. Small multipliers alone are unlikely to produce sufficient changes for solution verification. The minimum is especially useful for ensuring changes in regions that are initially coarse. A good set of (multiplier, minimum) parameters follows:

(2X, 1) (4X, 2) (8X, 3) (16X, 4), (prior *2, prior +1), etc.

A large minimum can cause quality problems and generate too many elements. For example, the minimum in the parameter series (2X, 1) (3X, 2) (4X, 3) (5X, 4) (6X, 5) (7X, 6) (8X, 7) etc. would likely be too aggressive. It would produce many more elements than the specified multiplier. It may cause the surface paver to generate very rapid transitions in element size, causing poor element quality or even mesh generation failure. For a slowly increasing set of multipliers, a less aggressive minimum series is recommended, such as

(2X, 1) (3X, 1) (4X, 2) (5X, 2) (6X, 2) (7X, 2) (8X, 3) etc..

[{SWEPT_BLOCKS | legacy | maintain_structure}]

There are three major block decomposition variations to choose from. To understand their differences, one must first understand the two types of blocks: "structured" and "swept" blocks. A structured block is a MxNxO structured grid. A swept block is a single-source to single-target sweep of some subset of a single volume. That is, it is composed of a single surface of quad elements, projected some number of layers to form hexes.

The block decomposition options are swept_blocks (default), maintain_structure and legacy. For legacy, only structured blocks are used. For swept_blocks and maintain_structure, the decomposition constructs large swept blocks wherever logical sweeps can be identified, and structured blocks otherwise. The main difference is that swept_blocks remeshes the source surfaces of swept blocks from scratch. In contrast, maintain_structure partition each swept block into structured sub-blocks, and remeshes by selectively refining those sub-blocks. Thus swept_blocks may change the number and relative location of irregular nodes, whereas maintain_structure keeps them the same.

Typically, swept_blocks and maintain_structure provide smoother, more evenly distributed refinements compared to legacy. This is because with swept blocks there are typically significantly fewer blocks in the decomposition. Having fewer blocks increases the likelihood that each block will receive at least some refinement before the multiplier is reached.

However, legacy and maintain_structure provide element orientations and structure closer to the original mesh than swept_blocks. This is because structured blocks maintain the irregular nodes.

Often maintain_structure provides both element orientations closer to the original mesh and a smoother, more evenly distributed refinement. Its structured blocks preserve orientations and structure. Its swept blocks provide the freedom to distribute changes, and smooth the mesh, across its structured sub-blocks.

[force_structured in {[volume <ids>] [surface <ids>]}]

In some cases, the user may want to use swept blocks in only some parts of the model. The original mesh may have small regions with carefully constructed meshes. Using swept_blocks can destroy these constructions, replacing them with pave-and-sweep meshes. These constructions can be preserved by specifying force_structured for the surfaces and volumes containing them.

For example, see Figures 3, 4 and 5. In Figure 414 surface 108 was meshed with great care to ensure a structured mesh around the holes, while surface 34 was meshed with paving. Since surface 108 has irregular nodes, it appears to Mesh Scaling as the source surface of a swept block. Figure 415 illustrates the resulting mesh from the command "scale mesh multi 2". Notice the structured meshes around the holes have been replaced with a standard paved mesh. Figure 416 illustrates preserving the structured holes of surface 108 while allowing surface 34 to be repaved. The command was "scale mesh multi 2 force_structured in surface 108". A different mesh would result from the command scale mesh multi 2 force_structured in volume 1, because this would also preserve the irregular nodes in surface 34, resulting in more blocks and a less smooth mesh.

Figure 414: Input mesh for Mesh Scaling. Surface 108 contains a non-mapped, but still structured mesh. Surface 34 contains a paved mesh.

Figure 415: The mesh from Figure 414 scaled with the command "Scale Mesh Multi 2". The structured mesh on surface 108 is replaced with a paved mesh.

Figure 416: The mesh from Figure 412 scaled with the command "Scale Mesh Multi 2 force_structured in Surface 108". The structured mesh in surface 108 is maintained, while the remainder of the volume is scaled with swept blocks.

[thin_gap_intervals <value, default=2>]

[fix_all_gaps] [max_feature_length]

For the maintain_structure option, the thin_gap_intervals parameter determines how thin gaps are defined. If two disjoint curves of a surface come close together, the space between them is considered a "thin gap" if the number of intervals across that space is at most thin_gap_intervals. Mesh scaling gives high priority to adding intervals within thin gaps. By default, the position of some nodes within thin gaps are fixed to help reduce skew. The fix_all_gaps option fixes all nodes in thin gaps. Features, e.g. curves and gaps, longer than max_feature_length intervals will be split into multiple features. This results in fixing additional nodes along the feature to help reduce skew.

In general, maintain_structure should result in a smoother scaled mesh than the other algorithms, however, sometimes it can introduce some skew in the scaled elements. If skew is introduced by scaling using maintain_structure, try either increasing the thin_gap_intervals parameter, specifying fix_all_gaps, decreasing the max_feature_length parameter, or all three.

[feature_angle <value>]

[max_aspect_ratio <value> in volume <ids>]

The feature_angle and max_aspect_ratio options affect the formation of swept blocks. These are alpha, experimental commands.

[smooth_volume {ON|off}]

If smooth_volume is on, then the volume mesh is smoothed as a post-process if it has poor quality elements, and smaller minimum quality than the original mesh. By default, smooth_volume is on.

5.6.13 Node and Nodeset Repositioning

A capability to reposition nodesets and individual nodes is provided. This capability will retain all the current connectivity of the nodes involved, but it cannot guarantee that the new locations of the moved nodes do not form intersections with previously existing mesh or geometry. This capability is provided to allow the user maximum control over the mesh model being constructed, and by giving this control the user can possible create mesh that is self-intersecting. The user should be careful that the nodes being relocated will not form such intersections.

The user can reposition nodes appearing in the same nodeset using the nodeset move command. Moves can be specified using either a relative displacement or an absolute position. The command to reposition nodes in a nodeset is:

Nodeset <nodeset_list> Move <delta_x> <delta_y> <delta_z>

The first form of the command specifies a relative movement of the nodes by the specified distances and the second form of the command specifies absolute movement to the specified position. The third form of the command specifies a displacement with respect to a specified surface normal.

Individual nodes can be repositioned using the node move command. Moves are specified as relative displacements.

To move a node

  1. On the Command Panel, click on Mesh and then Node.

  2. Click on the Move Node action button.

  3. Select Move XYZ from the drop-down menu.

  4. Enter the appropriate value for Node ID(s). This can also be done using the Pick Widget function.

  5. Enter the appropriate values for Delta X, Delta Y and Delta Z or manually move the node by dragging it to the desired location.

  6. Click Apply.

Note: The constrain to geometry option can be turned off to move the node outside of the geometry.

Node <range> Move <delta_x> <delta_y> <delta_z>

Node <range> Move {[X <val>] [Y <val>] [Z <val>]}

To move normal to surface

  1. On the Command Panel, click on Mesh and then Node.

  2. Click on the Move Node action button.

  3. Select Normal to Surface from the drop-down menu.

  4. Enter the appropriate value for Node ID(s) and Surface ID. This can also be done using the Pick Widget function.

  5. Enter the appropriate values for Distance.

  6. Click Apply.

Node <range> Move Normal to Surface <id> distance <val>

Nodes can also be repositioned using a location or direction specification. See Location, Direction, and Axis Specification for details on the location and direction specification. The command syntax is:

Node <range> Move Location <options>

Node <range> Move Direction <options>

5.6.14 Mesh Pillowing

Mesh pillowing is a mesh refinement technique that inserts a layer or ’pillow’ of elements around the boundary of an enclosed mesh. It can be used to improve mesh quality while preserving the outer boundary of the selected element set. Mesh Pillowing can be used to quickly perform a number of meshing tasks, such as inserting a uniform boundary layer a specified distance from an outer boundary, or inserting a ring of elements around a hole.

Figure 417: : A single hex before (a) and after (b) a pillow operation. The far right (c) depicts a pillow operation with the front surface designated as a 'through' surface.

During a typical pillow operation, the user selects a set of elements, called a ’shrink set’, to define what elements will be operated on. All elements on the outer boundary of the shrink set are then shrunk towards the center of the set. New elements are then created to fill the gap between the original boundary and the shrunk boundary. The newly created elements form the pillow around the selected shrink set. Figure 417a and 1b show an example of a pillow operation performed on a single hex. Geometry surfaces, or mesh element faces can be specified as through surfaces for the pillowing operation. This means that the pillow will extend through the selected surfaces, and no new elements will be created along them. Figure 417c shows the effect of pillowing a single hex with one surface selected as a through surface.

In some cases a shrink set may not be valid due to the geometry of a specific region. As the exterior nodes of the shrink set move towards the middle they must be able to maintain appropriate geometric associations. Nodes on vertices must move along curves, nodes on curves must move along surfaces. If there are multiple curves or surfaces along which an exterior node might travel, then the ownership is ambiguous and the pillowing will fail.

Using the optional distance keyword with a specified value allows manual control of the distance that each boundary element is shrunk towards the center of the shrink set. If no distance value is specified, an appropriate value is calculated for each element. If a distance value is specified, all newly created nodes will have their position fixed by default. This allows the user to smooth the mesh without altering the node positions of the newly created hexes. If the optional unfix_nodes keyword is used, this default behavior is changed, and any smooth operations will alter the newly created node locations. By default, a smooth operation is automatically performed following any pillow operation unless the optional no_smooth keyword is used.

Similar analogous commands are available for creating a pillow around a set of two dimensional faces.

To use mesh pillowing

  1. On the Command Panel, click on Mesh.

  2. Click on Volume, Surface, Curve, Vertex, Hex or Quad.

  3. Click on the Refine action button.

  4. Select Pillowing from the drop-down menu.

  5. Enter the appropriate value for the selected ID. This can also be done using the Pick Widget function.

  6. Enter in any other appropriate settings.

  7. Click Apply.

Pillow Hex <ids> [ Through { [Surface <ids>][Face <ids>][Tri <ids>] } ] [ Distance <value> ] [ Unfix_nodes ] [ No_smooth ]

Pillow Face <ids> [ Through Curve <ids> ] [ Distance <value> ] [ Unfix_nodes ] [No_smooth]

Figure 418: : Example model using pillow operations to create ordered nodes a specified distance around the boundary of a mesh.

5.6.15 Remeshing

Mesh generation is frequently an iterative process of meshing, deleting the mesh, and remeshing. The remesh command is a convenient tool to bypass the mesh deletion process when used to remesh a volume. You may also use the remesh command to replace a localized set of deformed tetrahedra after analysis. Thus, remeshing can become part of an optimization loop.

Use the following command to remesh hexahedra:

Remesh Volume <range>

To remesh tetrahedra

  1. On the Command Panel, click on Mesh and then Tet.

  2. Click on the Remesh action button.

  3. Select Remesh Entities.

  4. Select Tet(s), Volumes(s) or Block(s) and enter the appropriate value. This can also be done using the Pick Widget function.

  5. Optionally, enter in any other appropriate settings.

  6. Click Apply.

Remesh {Volume|Block|Tet} <range> [FIXED|free]

or to remesh a range of tets based upon quality criteria:

Remesh Tet <id_range> | [quality <tet_metric> [less than|greater than] <value> ...] [inflate <value>][FIXED|free][preview]

5.6.15.1 Remeshing a Swept Volume Mesh

The remesh command can be useful when using the sweep scheme. When a sweep scheme is applied to the volume, it will delete the target surface mesh on a volume with one of the sweeping schemes and then remesh the volume. It is useful when changing between sweep smooth options as in the following example below.

volume 1 scheme sweep
mesh volume 1

At this stage, the user may discover that poor quality elements may have been generated. The user could then do the following:

volume 1 sweep smooth winslow
remesh volume 1

At this point, the volume is remeshed using the sweep smooth winslow option.

5.6.15.2 Remeshing Tetrahedra

When used for tetrahedra, the remesh command generates a new tetrahedral mesh after deleting the existing mesh described by the list of tetrahedra, volumes, or blocks. When remeshing a list of tetrahedra, the smallest set of tets possible is replaced, which often means a partial remeshing of volumes, surfaces and/or curves. This set will always include the input list of tetrahedra but may include more.

Each tetrahedron may only be in one volume or block, but the list of tetrahedra may span volumes or blocks. Each block is treated individually if multiple blocks are specified.

The default FIXED option will ensure that any triangle or edge in the tetrahedron list to be remeshed that lie on geometric surfaces or curves will not be affected by the remesh operation. In contrast, the free option allows edges and triangles on curves and surfaces to be removed and remeshed. Use the FIXED option when it is important to maintain the boundary mesh configuration fixed, otherwise the free option will remesh the portions of curves and surfaces in the remesh region.

The remesh command can be used to selectively remove and remesh a small portion of tetrahedron in the mesh that have been identified as poor quality. This can be an effective tool for improving mesh quality on a deformed mesh following an analysis without the need to regenerate the full mesh.

The quality option will identify those tetrahedra from the full model and apply the remeshing opertaion only to those tetrahedra. Any of the standard quality metrics for tetrahedra may be used as the <tet_metric>. These include: aspect ratio bet, aspect ratio gam, element volume, condition no., jacobian, scaled jacobian, shape, relative size, shape and size, distortion, allmetrics, algebraic and traditional. The metric specification is used in conjunction with a less than or greater than specification and a threshold value. For example, the syntax below would remesh all tetrahedra in the mesh who’s scaled jacobian metric was less than 0.2.

remesh tet quality scaled jacobian less than 0.2 inflate 1 free

The inflate option can be used to expand the set of tets selected by the quality metric criteria. The <value> input following the inflate option is the number of tet layers surrounding the poor quality tets that will be included in the remesh region. Usually a value of 1 is sufficient to allow the tet mesher to generate better quality elements, however 2 or greater will remesh a larger portion of the mesh. A value of 0 is generally not recommended as it usually does not provide enough space for the tet mesher to improve element quality. The inflate option can also be used independently from the remesh command. See the inflate command described below.

This command also allows for multiple quality criteria. For example, the following command would use both aspect ratio and scaled jacobian as criteria for remeshing. Any number of quality criteria may be included in the command syntax:

remesh tet quality scaled jacobian less than 0.2 quality aspect ratio bet greater than 4 inflate 1 free

The preview option will display the tetrahedra selected by the quality criteria and inflate options without actually performing the remeshing operation.

Sizing functions may be used with tet remeshing. See Mesh Adaptivity and Sizing Functions and Exodus II-based Field Function for more information.

5.6.15.3 Inflating a set of Tets

In cases where a set of tets are to be remeshed, it is useful to be able to expand the set to include additional surrounding tets. This is to allow the mesher more freedom to place good quality elements, but also to ensure a valid shape in which the mesher has to work. The Inflate command starts with a given set of tetrahedra and will expand the set based on the number of user defined layers as well as manifold criteria. The result will be added to the curent group, or a new group can be created. The following describes the syntax and arguments to this command:

Inflate [group <id>|tet <range>][manifold][layer <value>][add|create <"name">][draw]

group<id>|tet<range>: input to this command can be with a group name, group id, or a range of tets. The group must contain at least 1 tet. The tets need not be contiguous.

manifold: This option will add tets to the set where the boundary or skin of the tets meet at a single edge or node. This ensures that a complete valid manifold definition of the boundary of the set of tetrahedra can be defined. This is important for the tetrahedral mesh generator which requires a manifold boundary definition. both layer and manifold can be used in the same command.

layer <value>: This option will add the number of layers of tets indicated by value to the set. A layer is defined by all tets connected by at least a node to the skin of the existing set. This option alone does not guarantee a valid manifold definition. Use both the layer and manifold in the same command options to ensure a manifold definition.

add|create<"name">: The add option will add tets in the inflated region to the input group. An input group must be specified for this to be a valid option. The create option will create a new group and add all tets (including the input), to a new group specified by <"name">. If neither add nor create are specified, a new default group named "inflated_tets" will be created. If a group of that name already exists, it will be added to.

draw: The draw option will display both the input set of tets and the inflated tets in the graphics window. The input tets will be displayed in green and the inflated tets will be displayed in red.

Examples:

Generate a simple tet mesh. For tets with ids 1 to 10, define a 1 layer buffer and ensure it maintains a manifold boundary. The result will be placed in a new group called "inflated_tets" and displayed in the graphics window.

brick x 10
vol 1 scheme tetmesh
mesh vol 1
inflate tet 1 to 10 layer 1 manifold draw

Create a group called "bad_tets"containing all tets in volume 1with quality metric (scaled Jacobian) less than 0.2. Expand that group by one layer and remesh it.

group ’bad_tets’ equals qual vol 1 scaled high 0.2
inflate bad_tets layer 1 manifold add
remesh tet in bad_tets

5.6.16 Hexset Command

The hexset separate command is designed to create groups containing hexahedral elements based an enclosing set of triangles.

The command is:

Hexset Hex <range> Separate Tri <range> [draw]

Given a closed set of triangles from either STL facets or tri-meshed geometry, find the set of hexahedral elements defined by a bounding box that are inside, on the boundary, or outside the tri-meshed region. These hexes are stored in the next three available groups and named inside_hexes, intersected_hexes, and outside_hexes.

The inside and outside hex groups are separated into contiguous regions. Depending on the triangles used to intersect the hexes, there may be multiple inside and/or outside groups. In that case, the first inside group would be named "inside_hexes". The second would be named "inside_hexes@A" and so forth.

For example, given a tri-meshed volume as shown below:

Figure 419:

We create a bounding box and mesh it with hexes.

Figure 420:

we issue the command, hexset hex all separate tri in surf 1 2, to get these results:

draw outside_hexes

Figure 421:

draw intersected_hexes

Figure 422:

draw inside_hexes

Figure 423:

Combining all three images we see outside, intersecting and inside hexes.

Figure 424: