On this page:
5.8.1 Mesh Adaptivity and Sizing Functions
5.8.2 Bias Sizing Function
5.8.3 Constant Sizing Function
5.8.4 Curvature Sizing Function
5.8.5 Exodus II-based Field Function
5.8.6 Geometry Adaptive Sizing Function (Skeleton Sizing)
5.8.6.6 Limitations
5.8.7 Interval Sizing Function
5.8.8 Inverse Sizing Function
5.8.9 Linear Sizing Function
5.8.10 Sizing Source Sizing Function
5.8.11 Geometry Adaptive for Tri  Mesh and Tet  Mesh Schemes
2022.4+26187-e1209cf7 Apr 14, 2022

5.8 Adaptivity And Sizing Functions

5.8.1 Mesh Adaptivity and Sizing Functions

Cubit provides several options for controlling the density of a mesh by adapting to various geometric, analysis, or user-defined properties. Interval sizes are defined automatically, explicitly, or through sizing functions. The sizing functions can be based on the physical features of the model, a previous analysis solution, or a user-specified bias. Adaptivity can apply to meshing either curves or surfaces.

5.8.1.1 Adaptive Curve Meshing

Cubit provides several ways to adaptively mesh curves. Three curve meshing schemes are provided for this purpose. They include the following schemes:

The first two schemes use characteristics of the geometric model to define element sizes. The third scheme uses a field function typically defined from a previous analysis solution. FeatureSize is an alpha feature and should be used with caution.

5.8.1.2 Adaptive Surface Meshing

Adaptive surface meshing in Cubit produces a function following mesh which sizes elements based on the value of the driving function at the spatial location at which the element is to be placed. Adaptive surface meshing is performed using the paving, triadvance or tridelaunay algorithms in combination with an appropriate sizing function. The types of sizing functions that can be used are

Super sizing and test sizing functions are alpha features and shouldbe used with caution.

The procedure for adaptively meshing a surface is to designate paving, triadvance or tridelaunay as the mesh scheme for that surface, assign sizing function types, and mesh the surface.

The command syntax of these commands is:

Surface < id > Scheme {Pave|TriAdvance|TriDelaunay}

then

Import Sizing Function ’<exodusII_filename>’ Block <block_id> Variable ’<variable_name>’ Time <time> [Deformed]

Surface <id> Sizing Function [Type] Exodus [Min <min_value> Max <max_value>]

or

Surface <id> Sizing Function [Type] {Constant|Curvature|Interval|Inverse|Linear|Super|Test|None}] [Neighbor [<max_neighbors>]]

(See note below regarding ’Neighbor’ parameter)

or

Surface <id> Sizing Function [Type] Bias Start Curve <id_range> {Finish Curve <id_range>| Factor <val>}

then

Mesh Surface <id>

5.8.1.3 Adaptive Volume Meshing

Adaptive volume meshing in Cubit produces a function following mesh that sizes elements based on the value of the driving function at the spatial location at which the element is to be placed. Adaptive volume meshing is performed using the tetmesh scheme in combination with an appropriate sizing function. The types of sizing functions that can be used are constant, test, geometry adaptive and geometry adaptive (skeleton sizing). Test sizing is an alpha feature and should be used with caution. Other sizing functions will be added in future versions of Cubit.

The procedure for adaptively meshing a volume is to designate tetmesh as the mesh scheme for that volume, assign sizing function types, and mesh the volume.

The command syntax of these commands is:

Volume <id> scheme tetmesh
Volume <id> Sizing Function [Type] {Constant|Test|None}
Mesh Surface <id>

The following sections describe details of the various volume sizing methods.

Note regarding ’Neighbor’ parameter: The maximum neighbors is the number of points used by the sizing function to compute the size at the requested point. If the number of neighbors is zero, all of the points on the boundary are used in the size calculation. If the number of neighbors is some other number, only that number of closest points are used in the calculation.

5.8.2 Bias Sizing Function

Syntax:

Surface <id> Sizing Function Type Bias Start Curve <id_range>
{Finish Curve <id_range>| Factor <val>}

Synopsis:

The bias sizing function for surfaces is similar to biasing curves. Indeed, setting a bias sizing function for a surface will bias the boundary curves, as well as control paving to follow the bias inside the surface. You first specify the size of a couple of bounding curves (the start curves), then specify the bias sizing function for the surface.

Discussion:

Recall that for biasing curves, you specify the start and end vertex. For the bias sizing function, you specify the start curves, from which to bias away. The sizes of these curves should already be set before setting the surface sizing function since their average size is taken to be the starting size (almost). If the start curve sizes change, then you should set the surface sizing function again.

You can either supply a geometric factor, or the set of finish curves whose sizes you want to match at that distance. A geometric factor. It automatically sizes and biases or dualbiases the non-start curves, including any finish curves. These curves need not be perpendicular to the starting curves. The interval count and scheme are soft-set, so they won’t be changed if they are already hard-set. If the size of the start curves or finish curves are changed, then the sizing function command should be re-issued.

The sizing function value at a point is defined in terms of the straight-line distance from the point to the closest starting curve. So, it works best if all the starting curves have the same size, and the surface is relatively flat. But, starting curves need not be parallel to one another. Similarly, the non-start curves need not have any particular orientation wrt the start curves.

The bias sizing function was designed to easily set the sizes of a sequence of adjoining surfaces: assign a size to the curve you want to bias away from, then set the bias sizing function of the first surface, with its finish curves being the start curve of the second surface, etc. See the last example below.

Examples:

Here are some example journal files and resulting pictures:

# bias_sz_fn_demo.jou
brick x 100 y 10 z 10
color vol 1 red
surface 1 scheme pave
surface all except 1 visibility off
# label curve interval
# graph text 2
display

# mesh 1
curve 4 size 2
surface 1 sizing function type bias start curve 4 factor 1.3
mesh surface 1
# see figure 1

Figure 425: Surface with bias sizing function factor > 1.

# mesh 2
delete mesh
surface 1 sizing function type bias start curve 4 factor {1/1.1}
mesh surface 1
# see figure 2

Figure 426: Surface with bias sizing function factor < 1

# mesh 3
reset
cyl rad 6 z 1
cyl rad 4 z 1
sub 2 from 1
section body 1 yplane
section body 1 xplane
surf all except 19 vis off
color vol 1 red
display

# finish curve mesh
surf 19 scheme qtri base scheme pave
surface 19 size 0.7
curve 26 size 0.07
surface 19 sizing function type bias start curve 26 finish curve 25
mesh surface 19
pause
# see Figure 427

Figure 427: Surface with bias sizing function start and finish curve. Scheme qtri, base scheme pave.

# dual bias mesh
delete mesh
curve 25 26 size 0.02
curve 25 26 scheme equal
surface 19 sizing function type bias start curve 26 25 factor 1.3
mesh surface 19
zoom curve 12
pause
# see Figure 428

Figure 428: Close up of surface with dual bias sizing function start and finish curve. Scheme qtri, base scheme pave.

# funny face
reset
prism sides 5 z 1 radius 1
cylinder radius 0.1 z 1
body 2 move -0.4 0 0
subtract 2 from 1
cylinder radius 0.1 z 1
body 3 move 0.2 0 0
subtract 3 from 1
prism sides 6 radius 0.2 z 1
body 4 move 0 -0.4 0
subtract 4 from 1
surface all except 34 visibility off
color vol 1 red
display
surface 34 scheme pave
curve 23 19 size 0.01
surface 34 sizing function type bias start curve 19 23 factor 1.3
mesh surface 34
# see Figure 429

Figure 429: Bias away from two round holes.

# bias surface chain
reset
cylinder radius 1 z 1
cylinder radius 0.2 z 1
cylinder radius 0.4 z 1
cylinder radius 0.8 z 1
imprint body all
delete body 2 3 4
section body 1 xplane
section body 1 yplane
surface all except 42 43 44 45 vis off
color volume 1 red
surface all scheme pave
curve 55 interval 36
surface 43 sizing function type bias start curve 55 factor 1.3
surface 44 sizing function type bias start curve 57 factor 1.3
# curve 57 had its size determined by a prior bias sizing function
surface 45 sizing function type bias start curve 58 factor 1.3
surface 42 sizing function type bias start curve 55 factor 1.3
mesh surface 42 43 44 45
display
highlight curve in surface 42 43 44 45
# see Figure 430

Figure 430: A chain of biased surfaces. Only one curve's intervals were explicitly set.

5.8.3 Constant Sizing Function

To use the constant sizing function

  1. On the Command Panel, click on Mesh.

  2. Click on Volume or Surface.

  3. Click on the Intervals action button.

  4. Select Sizing Function from the drop-down menu.

  5. Enter the appropriate value for Select Volumes or Select Surfaces. This can also be done using the Pick Widget function.

  6. Select Constant from the Sizing Functions menu.

  7. Enter in any other appropriate settings.

  8. Click Apply and then Mesh.

Surface <id> Sizing Function [Type] Constant

Volume <id> Sizing Function [Type] Constant

Synopsis:

The constant sizing function specifies that a constant element size be used over the interior of the surface or volume. The value used as the constant size is the interval size that has been set for the entity. For example, the following commands will cause the mesh size to be smaller on the interior than on the surface’s bounding curves.

reset
brick x 10
surface 1 scheme pave
curve in surface 1 interval 5
surface 1 size 0.5
surface 1 sizing function constant
mesh surface 1

Figure 431: Constant Sizing Function

5.8.4 Curvature Sizing Function

The curvature sizing function determines element size based on the curvature evaluation of a surface at the current location. Two surface curvature values (taken perpendicular to each other) are compared at the location of interest, and the largest is used as the sizing function for the mesh. Figure 432 shows a solid with a highly deformed surface which displays rapid change of surface curvature at several locations.

high_curve_nurb00.gif

Figure 432: NURB solid with high surface curvature change

Figure 433 depicts a normal paved mesh of this surface using a common size on all bounding curves and no sizing function in the interior. The total number of quadrilateral shell elements for this case is 1988. Figure 434 shows a mesh which was generated with the curvature sizing function option. The mesh is graded denser in the regions of quickly changing curvature, such as at the tops of the hills and at the bottom of the valley. Due to the intense interrogation of the underlying geometric modeler which the curvature method relies on, this option can be very computationally expensive.

nurb_no_sizing0.gif

Figure 433: NURB mesh with no interior sizing function

nurb_curvature_sizing0.gif

Figure 434: NURB mesh with curvature sizing function

5.8.5 Exodus II-based Field Function

The ability to specify the size of elements based on a general field function is also available in Cubit. With this capability, the desired element size can be determined using a field variable read from a time-dependent variable in an Exodus II file. Both quadrilateral and triangle elements are supported for surfaces, but only tetrahedral elements are supported for volumes at this time.

A field function is a time-dependent variable in an Exodus II file. Either node-based or element-based variables may be used. Currently, field functions are imported from element and node-based Exodus II data. The mesh block containing the corresponding elements must be imported along with the field function data.

Exodus variable-based adaptive meshing is accomplished in Cubit in several steps:

  1. Surface mesh scheme set to Pave or TriAdvance, and/or volume mesh scheme set to Tetmesh. Bounding curve mesh schemes can also optionally be set to Stride (see comments below.)

  2. An Exodus mesh and time-dependent variable for that mesh is read into Cubit.

  3. The mesh and variable data are associated to geometry.

  4. The Exodus variable is normalized to give localized size measures, and the surface/volume sizing function type is designated.

  5. Geometry is meshed

Importing a field function and associating it with its geometry, and normalizing that function are done in two separate steps to allow renormalization. The following command is used to read in a field function and its associated mesh:

Import Sizing Function ’<exodusII_filename>’ Block <block_id> Variable ‘<variable_name>’ Time <time_val> [Deformed]

where block_id is the element block to be read, variable_name is the Exodus time-dependent variable name (either element-based or nodal-based),and time_val is the problem time at which the data is to be read. The deformed keyword indicates whether deformation has been accounted for on the new model (for information on creating deformed 2D geometry from EXODUSII data, see Importing 2D EXODUSII Files) and needs to be accounted for in the sizing function data. When this command is given, the nodes and elements for that element block are read in and associated to geometry already initialized in Cubit.

Note that when a sizing function is read in, the mesh is stored in an ExodusMesh object for the corresponding geometry, and therefore the geometry is not considered meshed. Also note that if deformation is not being modeled, the geometry to which the mesh is being associated must be in the same state as it was when that mesh was written (see Importing a Mesh for more details on importing meshes).

Once the field function has been read in and assigned to geometry, it can be normalized before being used to generate a mesh. The normalization parameters are specified in the same command that is used to specify the sizing function type for the surface or volume.

To use the exodus II-based field function

  1. On the Command Panel, click on Mesh.

  2. Click on volume or surface.

  3. Click on the Intervals action button.

  4. Select Sizing Function from the drop-down menu.

  5. Enter the appropriate value for Select Volumes or Select Surfaces. This can also be done using the Pick Widget function.

  6. Select Exodus from the Sizing Functions menu.

  7. Enter in the appropriate settings for Min Size and Max Size.

  8. Click Apply and then Mesh.

Surface <id> Sizing Function Type Exodus [Min <min_val> Max <max_val>]

Volume <id> Sizing Function Type Exodus [Min <min_val> Max <max_val>]

If normalization parameters are specified, the field function will be normalized so that its range falls between the minimum and maximum values input. Subsequent normalizations operate on the normalized data and not on the original data. If an element-based variable is used for the sizing function, each node is assigned a sizing function that is the average of variables on all elements connected to that node. Nodal variables are used directly.

After the sizing function normalization, the geometry may be meshed using the normal meshing command.

For example, the left image in Figure 435 depicts a plastic strain metric which was generated by PRONTO-3D [Taylor, 89] a transient solid dynamics solver, and recorded into an ExodusII data file. When the file is read back into Cubit, the paving algorithm is driven by the function values at the original node locations, resulting in an adaptively generated mesh [Attaway, 93]. The right image in Figure 435 depicts the resulting mesh from this plastic strain objective function.

Figure 435: Plastic strain metric and the adaptively generated mesh

5.8.5.1 Curve Meshing with Exodus II - based Field Functions

In addition to the capability to adaptively mesh surface using a field function, curves may also be meshed separately using the Exodus II information. The Stride scheme for meshing curves is used for this purpose. If the user does not specify a mesh scheme for the curve, Cubit will default to scheme Stride when the Exodus sizing function is used for surfaces and volumes defined by that curve.

5.8.6 Geometry Adaptive Sizing Function (Skeleton Sizing)

The geometry adaptive sizing function, also referred to as the skeleton sizing function (Quadros 2005; Quadros 2004; Quadros 2004(2)), automatically generates a mesh sizing function based upon geometric properties of the model. This sizing scheme attempts to create a sizing function that allows unstructured meshing schemes to generate a mesh with the following properties:

The geometry adaptive sizing function can be used to create sizing information for surfaces, solids, and assemblies.

This sizing function uses geometric properties to influence mesh size. The scheme calculates or estimates:

These properties are then used to calculate a sizing function throughout the geometric entity (or entities). Regions of relatively high complexity will have a fine mesh size, while regions of relatively low complexity will have a coarse mesh size. For example, generally, a high-curvature region on a surface will have a finer mesh size than a low-curvature region on that surface

figure01.gif

Figure 436: Overview of Computational Framework

figure02.gif

Figure 437: Skeleton Sizing Function example in the GUI

5.8.6.1 Skeleton Sizing Behaviors

Skeleton sizing can be specified on single or multiple surface(s)/volume(s) at a time from the GUI (Meshing Control Panel) or the command-line. The following describes how specifying sizing on entities can change skeleton sizing’s behavior:

Single surfaces/volumes – If skeleton sizing is applied to surfaces/volumes one at a time, each entity’s sizing is not influenced by the others. On the command-line, issue a separate command for each entity. In the GUI, specify only one surface or volume before selecting Apply Size.

Multiple surfaces – If skeleton sizing is applied on multiple surfaces together, then geometric features of a particular surface may affect its neighboring surfaces.

Multiple volumes (assembly sizing) – Skeleton sizing can be applied to assembly models so that geometric features of a volume may influence its neighbors. Volumes should first be imprinted and merged before they are specified together for skeleton sizing.

5.8.6.2 Command Line Syntax

Skeleton sizing on surfaces:

Surface <surface_id_range> Sizing Function Skeleton
{[scale <1 to 10 = 7>] [time_accuracy_level <1 to 3 = 2>]
[min_depth <3 to 8 = 5>] [max_depth <4 to 9 = 7>] [facet_extract_ang <1 to 30 = 10>]
[min_num_layers_2d < 1 to N = 1>] [min_num_layers_1d < 1 to N = 1>]
[max_span_ang_surf <5.0 to 75.0 = 45.0 degrees>]
[max_span_ang_curve <5.0 to 75.0 = 45.0 degrees>]
[min_size <float>] [max_size <float>] [max_gradient <float=1.5>]}

Skeleton sizing on volumes:

Volume <range> Sizing Function Skeleton
{[scale <1 to 10 = 7>] [time_accuracy_level <1 to 3 = 2>]
[min_depth <3 to 8 = 5>] [max_depth <4 to 9 = 7>] [facet_extract_ang <1 to 30 = 10>]
[min_num_layers_3d < 1 to N = 1>] [min_num_layers_2d < 1 to N = 1>]
[min_num_layers_1d < 1 to N = 1>]
[max_span_ang_surf <5.0 to 75.0 = 45.0 degrees>]
[max_span_ang_curve <5.0 to 75.0 = 45.0 degrees>]
[min_size <float>] [max_size <float>] [max_gradient <float=1.5>]}

The options are explained below:

5.8.6.3 Basic Arguments
5.8.6.3.1 Scaling and Accuracy Arguments:
5.8.6.4 Advanced Arguments
5.8.6.4.1 Lattice Arguments:

The skeleton sizing function is generated and stored on a background octree grid whose cells are subdivided based on the graphics facets of the model. The level of subdivision of the background grid affects how well the sizing function captures the geometric complexity of features. Reasonable defaults have been selected for the following two refinement (subdivision) parameters, but these may be overridden for use with simple (decrease parameters) or more complex (increase parameters) models.

5.8.6.4.2 Source Entity Arguments

Note: These arguments override the basic arguments. For example, time accuracy level 1 internally sets min_depth = 4 and max_depth = 6, and when min_depth is set to 4 and max_depth is set to 7 in the advanced options (recommended for models with fine features), then advanced options override the basic options. In the command-line, to override the depths set by a time_accuracy_level, specify min_depth and max_depth after it.

5.8.6.5 Skeleton with Other Sizing Controls

Skeleton sizing function produces a smooth sizing function when called with other sizing controls available in Cubit. Skeleton sizing function behaves as SOFT firmness level. Skeleton sizing function always respects interval count specified on the curves. Skeleton sizing function respects interval size on curves and surfaces only if it is specified after calling the skeleton sizing function.

figure03.gif

Figure 438: Skeleton sizing function with other sizing controls

5.8.6.6 Limitations
5.8.7 Interval Sizing Function

The interval sizing function is similar to the Linear function, but bases edge length at a location on the squared lengths of edges bounding the surface weighted by their inverse distance from the current location. An example is shown below.

Figure 439: NURB mesh with interval sizing function, 34 by 16 density

5.8.8 Inverse Sizing Function

The inverse sizing function is also similar to the Linear function, but this method bases edge length at a location on the inverse lengths of edges bounding the surface weighted by their inverse distance from the current location (see Figure 440). The difference between the three linear sizing functions (Linear, Interval, Inverse) is sometimes subtle, but is driven by the geometry being meshed since the influence of these functions is strongly controlled by the number, positioning, and mesh density of the bounding curves relative to the interior surface area.

Figure 440: NURB mesh with inverse sizing function, 34 by 16 density

5.8.9 Linear Sizing Function

The linear class of sizing functions determines element size based on a weighted average of edge lengths for mesh edges bounding the surface being meshed. There are several variants of this class of sizing function. The Linear function bases edge length at a location on the lengths of edges bounding the surface weighted by their inverse distance from the current location. The result of this weighting is a more gradual change in mesh density during a transition between dense and coarse mesh. Figure 1 shows the same NURB surface mesh but with intervals of 34 on two curves and intervals of 16 on the remaining two bounding curves and no sizing function. It can be observed that the mesh progresses more rapidly inward from the coarser meshed curves, which locates the transition region much closer to the finer meshed curves. To combat this, the Linear function weights the sizing of new elements such that these transitions occur slower. Figure 441 displays two views of the same NURB geometry with the same bounding curve mesh density using the linear sizing function.

linear_sizing_01.gif

Figure 441: NURB mesh with linear sizing function, 34 by 16 density

Figure 1. NURB mesh with no sizing function, 34 by 16 density

linear_sizing_02.gif

linear_sizing_03.gif

5.8.10 Sizing Source Sizing Function

Figure 442:

An intuitive method for adding a sizing function to the tetrahedral meshing workflow is introduced with Trelis 17.1 in May 2020. This method places a graphical ellipsoid on the model allowing the user to modify the geometry and mesh size settings of the ellipsoid thereby affecting the impact of the sizing function on the mesh.

5.8.10.1 Commands Available

select [sizing_source <ids>] [{add|remove}]

create sizing_source id ellipsoid[location <options>]

[radius <xval> <yval> <zval>] [axis <options>][size <value>] growth_factor <value>]

delete sizing_source id <value>

modify sizing_source id ellipsoid[location <options>]

[radius <xval> <yval> <zval>] [axis <options>][size <value>] growth_factor <value>]

sizing_source visibility {on|off}

5.8.10.2 Possible workflow using the GUI
5.8.10.2.1 Create the sizing source ellipsoid

Figure 443:

Figure 444:

Figure 445:

5.8.10.3 Attach the sizing source ellipsoid(s) to the volume(s)

After creating the sizing source ellipsoids the next step is to assign these sizing functions to volumes. Simply creating the sizing sources will not affect the meshing. In order to have these sizing sources act as sizing functions the sources must be attached (or assigned) to volumes.

Note: Use this same command panel to remove the association between Sizing Source sizing functions and volumes. Select the Remove Volume(s) radio button then click Apply.

Figure 446:

5.8.10.4 Set the volume’s meshing scheme to tetmesh and mesh the volume

Once the sizing sources are created and assigned to volumes, mesh the volumes using Cubit.

volume <n> scheme tetmesh

mesh volume <n>

Figure 447:

5.8.10.5 Modify a Sizing Source sizing function

An existing Sizing Source may be modified using one of several methods:

Figure 448:

  • From the Modify Sizing Function Source command panel

Figure 449:

Figure 450:

5.8.10.6 Selecting and picking a Sizing Source

Users may select a Sizing Source using several methods:

select sizing_source <id>

Figure 451:

  • Using the select filter on the toolbar then click on a Sizing Source object

Figure 452:

Figure 453:

5.8.10.7 Changing the visibility of a Sizing Source

The visibility of a Sizing Source can be toggled on and off from the toolbar

Figure 454:

5.8.10.8 Deleting a Sizing Source sizing object

A Sizing Source may be deleted using several methods:

delete sizing_source id <n>

Figure 455:

  • From the Sizing Sources Delete command panel

    • The command panel supports deleting multiple Sizing Source objects with one command.

Figure 456:

  • From the graphics window when the Sizing Source select filter is active and Sizing Source is selected

Figure 457:

  • With the Delete key

    • After selecting a Sizing Source object in the model tree or in the graphics window press the Delete key on your keyboard.

5.8.11 Geometry Adaptive for TriMesh and TetMesh Schemes

The trimesh and tetmesh schemes in Cubit are based upon third party libraries known as MeshGems that are developed and distributed by Distene. They are robust and fast triangle and tet meshing algorithms that have built in capabilities for adaptively controlling the mesh size based upon feature sizes. In most cases the sizing controls provided as part of the scheme command are sufficient to control mesh sizes. As such, the sizing functions described in this section cannot be used with the the MeshGems triangle and tet meshing algorithms. If a sizing function is assigned to a volume or surface, and the trimesh or tetmesh scheme is selected, rather than using the MeshGems algorithm for meshing the surfaces, it will automatically revert to using the triadvance scheme. Any settings defined with the trimesh or tetmesh scheme will be ignored and the sizing function will be used to determine local mesh sizes. When using the trimesh and tetmesh schemes, recommended practice is to mesh all surfaces and volumes simultaneously. This provides the greatest flexibility to the algorithms to determine feature sizes and their effect on neighboring surfaces and volumes. The default settings for trimesh and tetmesh schemes will automatically provide geometry adaptive mesh sizing. These default settings can however be adjusted by using the settings on the scheme command. The scheme settings are described in the tetmesh and trimesh sections of the documentation.