Sculpt

Sculpt is a separate parallel application designed to generate all-hex meshes on complex geometries with little or no user interaction. Sculpt was developed as a separate application so that it can be run independently from Cubit on high performance computing platforms. It was also designed as a separable software library so it can be easily integrated as an in-situ meshing solution within other codes. Cubit provides a front end command line and GUI for the Sculpt application. The command will build the appropriate input files based on the current geometry and can also automatically invoke Sculpt to generate the mesh and bring the mesh back to Cubit.

Preparing to Use Sculpt

Platforms

Sculpt is available for Windows, Mac and Linux operating systems.

Sculpt Installation

Sculpt is a stand-alone executable, separate from Cubit. In order for Cubit to start up Sculpt, it must be on your system and accessible to Cubit. The default installation of Cubit should install files in the correct locations for this to occur. Check with Cubit support if it did not come with your installation or you are not able to locate it or any of its supporting applications.

To run Sculpt from Cubit, four executable files are needed:

To view the current path to these executables that Cubit will use, issue the following command from the Cubit command window

 Sculpt Parallel Path List

See the Sculpt Parallel Path Command for more info on setting and customizing these paths.

The following image illustrates the process flow when the sculpt parallel command is used in Cubit.

Sculpt process flow

For the Sculpt meshing process, a set of files, including a facet-based stl file are written to disk. The sculpt application is then started up which in turn invokes mpiexec to start up multiple instances of psculpt in parallel. psculpt then performs the meshing and writes one exodus file per processor. These files can then be combined using epu and then imported back into Cubit for viewing.

Setting your Working Directory

When using the Sculpt Parallel command in Cubit, several temporary files will be written to the current working directory. Because of this, it is important to set your working directory before using Sculpt to a desired location where you want these files placed.

Sculpt Parallel Command

The command syntax for preparing a model for Sculpt is:

 Sculpt Parallel [Volume|Block <id_list>]
     [processors <value>]
     [fileroot '<root filename>']
     [exodus '<exodus filename>']
     [overwrite]
     [absolute_path]
     [no_execute]
     [size <value>|autosize <value>]
     [xint <value> yint <value> zint <value>]
     [box align|{Location <options> Location <options>}]
     [smooth <value>]
     [csmooth <value>]
     [num_laplace <value>]
     [max_opt_iters <value>]
     [opt_threshold <value>]
     [max_pcol_iters <value>]
     [pcol_threshold <value>]
     [max_deg_iters <value>]
     [deg_threshold <value>]
     [sideset <value>]
     [void]
     [stair <value>]
     [htet <value>]
     [pillow <value>]
     [adapt_type <value>]
     [adapt_threshold <value>]
     [adapt_levels <value>]
     [combine]
     [import]
     [show]
     [clean]
     [gen_input_file]

Option Description
Volume | Block <id_list>

Default: Volume all

List of volumes or Blocks to include in the mesh. One file containing a facetted representation (STL) per volume will be generated and saved in the current working directory to be used as input to Sculpt. Each volume will be treated as a separate material within sculpt and a conforming mesh will be generated where volumes touch. If the Block command is used, one file per block will be used. Each block represents a separate material in Sculpt.
processors <value>

Default: 4

Number of processors to use for meshing. One exodus file per processor will be generated.
fileroot '<root filename>'

Default: sculpt_parallel

Root of file names for output. When the sculpt parallel command is executed, Cubit will generate multiple files in the working directory used for input to the Sculpt application. The '<root filename>' will be used as the basis for naming these files.
exodus '<exodus filename>'

Default: <'root filename'>

If a different filename for resulting exodus files is desired, the Exodus option can be used. Exodus files will use <'filename'> as the root and filenames will be of the form <exodus filename>.<processors>.<iproc>. For example where '<exodus filename>'="model", processors=8, eight files will be written of the form model.e.8.0, model.e.8.1, ... model.e.8.7.
overwrite

Default: OFF (Do not overwrite)

By default, Cubit will not overwrite an existing set of files with the same '<root filename>'. To over-ride, use the overwrite option.
absolute_path

Default: OFF (relative path)

By default, Cubit will write the relative path names of files used in the .run and .diatom files. To force absolute path names to be written, use the absolute_path option
no_execute

Default: OFF (Invoke Sculpt)

By default, Cubit will attempt to run sculpt in parallel on the machine Cubit is currently running on. To generate just the required input to run Sculpt at a later time or on another machine, use this option. A file of the form <root filename>.run will be generated in the current working directory. (for example "model.run"). Executing the .run file from the linux command line should run sculpt in parallel. It can also be used to run sculpt on a cluster where a Cubit executable may not be available.
size <value> | autosize <value>

Default: autosize 10

The size or autosize option may be used.
  • The size option will define the absolute cell size for the base Cartesian grid that Sculpt will use for generating the mesh. This is the target size of each edge in the mesh in the units of the current model.
  • The autosize option is a value between 0 and 10. It represents a model independent size where 1 is the small size and 10 is large. This is the same scaling factor used in Cubit's auto sizing but is divided by ten. A size value will be computed from the selected autosize and used as the absolute cell size for the base Cartesian grid.
xintervals <value> yintervals <value> zintervals <value>

Default: Automatically computed from size

Rather than a cell size, the number of intervals in the x, y, and z directions may be specified for the bounding Cartesian grid. Both size and intervals cannot be specified simultaneously. It is recommended that intervals be defined so that aspect ratio for cells is approximately a cube.
box align | {Location <options> Location <options>

Default: Enclosing bounding box automatically computed from size with 2.5 additional cells on each side

Either align or location options may be used to define the bounding box.
  • The align option will attempt to orient the Cartesian grid with the main dimensions of the geometry. This is done by defining a tight bounding box around the geometry using an optimization procedure where the objective is to minimize the difference in volume between an enclosing box and the geometry. The align option is used in place of an explicit bounding box definition as it will automatically build an "aligned" bounding box around the full geometry. Note that this option will also write temporary stl and diatom files to the working directory.
  • Location options define the bounds of the Cartesian grid. The first Location <option> defines the minimum Cartesian coordinate of the grid and the second, the maximum. The <options> can be any valid method for defining a coordinate location in cubit. In most cases the position option can be used. For example: box location position -5 -5 -5 location position 5 5 5 will define a Cartesian grid centered about the origin that is 10 units on each side. The default box will be the bounding box of the geometry with an additional 2.5 cell layers added to each dimension.
smooth <value>

Default: 1 (Combined Laplacian/ Optimization)

Smoothing adjusts node locations following meshing to improve mesh quality. Sculpt includes both Laplacian and Optimization-based smoothing and by default is performed automatically to achieve maximum possible mesh quality for the given geometry. See Sculpt Mesh Quality Control for discussion of Sculpt's default three-tired smoothing approach. In some cases it may be worthwhile to experiment with alternate smoothing parameters as noted here. Smoothing options available:
  • 0 = No smoothing is performed.
  • 1 = (Default) Combined Laplacian/Optimization (Hybrid) smoothing for both surface and volumes. Boundary buffer layer improvement is performed at surfaces intersecting the domain boundary.
  • 2 = Surface smoothing using facets as geometry with Laplacian smoothing and hybrid volume smoothing. Boundary buffer improvement is on.
  • 3 = Surface smoothing using interpolated geometry with Laplacian smoothing and hybrid volume smoothing. Boundary buffer improvement is off.
  • 4 = Surface smoothing using interpolated geometry with Laplacian smoothing and Laplacian volume smoothing
  • 5-6 = Notot used
  • 7 = Surface smoothing using interpolated geometry with Laplacian smoothing and hybrid volume smoothing (same as 3). Except no boundary buffer improvement is performed.
  • 8 = Combined Laplacian/Optimization (Hybrid) smoothing for both surface and volumes. (same as 1) Except with no boundary buffer improvement performed.
  • 9 = Same as option 8 however surface nodes are not projected to the interpolated surface. This is effective in smoothing noisy surface data, but can potentially reduce overall volume.
csmooth <value>

Default: 5 (Volume Fraction)

The csmooth option controls the smoothing method used on curves. In most cases the default should be sufficient, however it may be useful to experiment with different options. The default curve smoothing option is 5 (Volume Fraction). The following curve smoothing options are available:
  • 0 = No curve smoothing will be performed.
  • 1 = Circle smoothing. Nodes projected to a fitted circle defined current node and its two neighbors.
  • 2 = Hermite smoothing. Nodes projected based on Hermite interpolation.
  • 3 = Average Tangent. Nodes projected based on average tangent of neighbors. Note that this method can only be used in serial (-j 1)
  • 4 = Neighbor Surface Normal. Nodes projected based on neighboring surface normals and the resulting intersecting planes.
  • 5 = Volume Fraction. (Default) Nodes projected to initial curve interface defined from the original volume fraction data.
  • 6 = Linear. Nodes projected to the linear segment defined by the node and its two immediate neighbors.
num_laplace <value>

Default: 2

Number of Laplacian smoothing iterations performed. See Laplacian Smoothing
max_opt_iters <value>

Default: 5

Indicates the maximum number of iterations of optimization-based smoothing to perform. May complete sooner if no further improvement can be made. See Optimization Smoothing
opt_threshold <value>

Default: 0.60

Jacobian where Optimization smoothing will be performed. Elements with scaled Jacobian less than opt_threshold and their neighbors will be smoothed.
max_pcol_iters <value>

Default: 100

Maximum number of spot smoothing (also known as parallel coloring) iterations to perform. May complete sooner if no further improvement can be made. See Spot Optimization
pcol_threshold <value>

Default: 0.2

Indicates scaled Jacobian threshold for spot smoothing (also known as parallel coloring). A parallel coloring algorithm is used to uniquely identify and isolate nodes to be improved using optimization.
max_deg_iters <value>

Default: 0

Maximum number of edge collapse iterations to perform to create degenerate hex elements. See Creating degenerate hexes
deg_threshold <value>

Default: 0.2

Indicates scaled Jacobian threshold for edge collapses. Nodes at hexes below this threshold will be candidates for edge collapses, provided doing so will improve the minimum scaled Jacobian at the neighboring hexes.
sideset

Default: 0 (No sidesets generated)

Several options for generating sidesets are available.
  1. Fixed: Exactly 3 sidesets will be generated acoording to the following:
    • Sideset 1: All sides at the domain boundary. Sides will only be present in this sideset if the model intersects the enclosing bounding box or the void option is used.
    • Sideset 2: All sides at the model boundary. Any side on the model that is not interior will be included. This should represent a full enclosure of the model if it does not intersect the domain boundary.
    • Sideset 3: All sides at material interfaces. Includes sides on the interior where adjacent blocks are different
  2. Variable: A variable number of sidesets will be generated with the following characteristics:
    • Surfaces at the domain boundary
    • Exterior material surfaces
    • Interfaces between materials
    Unlike Fixed sidesets, grouping of sides will be contiguous. A separate sideset will be generated for each set of contiguous sides.
  3. Geometric Surfaces: Sidesets will be generated according to surface IDs currently defined on the geometry model. One sideset per surface will generated.
  4. Geometric Sidesets: Sidesets will be generated based on the current sidesets assigned to surfaces in the geometric model.
void

Default: OFF (Elements not generated in void)

If void option is used, then the void space surrounding the geometry will be treated as a separate material. Elements will be generated in the void to the extent of the Cartesian grid boundaries.
stair <value>

Default: 0 (Boundaries smoothed)

If the stair option is used, no projection and smoothing of material interfaces will occur. The result will be a Cartesian mesh where elements may be stair-step at the boundaries of the material regions.
  • 0 = Stair option is off (default)
  • 1 = Stair-step mesh is generated, but additional processing is done to ensure material interfaces are manifold. This option may add or subtract cells from the basic mesh (where volume fraction > 0.5) to ensure no non-manifold connections between nodes and edges exist in the final mesh.
  • 2 = The exterior boundary will be smooth while internal material interfaces will be stair-step. This option also ensures manifold connections between elements.
  • 3 = Fast stair-step mesh. Generates the final mesh based only on volume fraction criteria. No additional processing is done to ensure manifold connections between edges and nodes.
htet <value>

Default: -1.0 (Hexes only)

Automatically generate tets in place of poor quality elements. This option can be used to eliminate poor quality hex elements by replacing each hex that falls below the user defined <value> Scaled Jacobian with 24 tets. Default value for htet is -1.0. The result will be a non-conforming mesh at the interface between tets and hexes. One additional nodeset and sideset will be generated and output to the exodus file if the sideset option is specified.
  • Sideset 10000 = the set of hex faces that interface a set of 4 tets.
  • Nodeset 1000 = the set of nodes at the interface between hexes and tets. One node per face in Sideset 10000 will be included.
pillow <value>

Default: 0 (No pillow)

Generate a pillow or additional layer of hexes at surfaces as a means to improve element quality near curve interfaces. This is intended to eliminate the problem of 3 or more nodes from a single hex face lying on the same curve. The following options are available:
  • 0 = (Default) No pillowing is performed
  • 1 = All hexes containing faces on surfaces will be pillowed.
  • 2 = Only hexes that have faces with 3 or more nodes on a curve will be pillowed. One additional layer beyond the poor quads at the curves will be included in the pillow region.
These options may be modified by adding 2 additional digits to the option. The second digit will turn on and off smoothing following the pillow operation and the third digit defines the number of layers of quads beyond the poor quality quads at the curves that will be included in the pillow region. For example:
  • 100 = All hexes containing faces on surfaces will be pillowed, however no smoothing will be performed following the pillow operation.
  • 203 = Hexes that have faces with 3 or more nodes on a curve will be pillowed. Additionally, 3 layers of quads will be included in the pillow region. No smoothing will be performed.
adapt_type <value>

Default: 0 (No adaptivity)

This option will automatically refine the mesh according to a user-defined criteria. Without this option, a constant cell size will be assumed everywhere in the model. To build the mesh, Sculpt uses an approximation to the exact geometry of the CAD model by interpolating mesh surfaces from volume fraction samples in each cell of the Cartesian grid. In general, the, higher the resolution of the Cartesian grid, the more sampling is done and the more accurate the mesh will represent the initial geometry. The adapt_type selected will control the criteria used for refining the mesh. If the criteria is not satisfied, the refinement will continue until a threshold indicated by the adapt_threshold parameter is satisfied everywhere, or the maximum number of levels (adapt_levels) is reached. The following criteria for refinement are available:
  • 0 = No Refinement: Cartesian grid is defined by xint, yint, and zint or cell_size and used as the basis for sculpt mesh.
  • 1 = Distance from STL Facet to Approximated Geometry: This option will evaluate every location where an edge in the Cartesian grid intersects a triangle of the STL model and measures the closest distance to the approximated geometry. The cells adjacent to intersecting edges where the measured distance is greater than the adapt_threshold will be identified for uniform refinement. This is done for each refinement level where a new approximated geometry is then computed based upon the finer resolution grid. The refinement will continue until all measured distances are less than the adapt_threshold, or the maximum number of levels (adapt_levels) is reached. This option can only be used if input comes from an STL file. Microstructures and diatoms are currently not supported.
  • 2 = Distance from Approximated Geometry to Facet: This criteria is similar to option 1 except that the locations selected for sampling are chosen from the vertices representing the approximated surfaces. The closest distance measured to any of the facets in the STL model is used as the criteria for refinement. Those cells at vertices where the distance measured exceeds the adapt_threshold are identified for refinement. This option is generally faster than 1, but may miss features if the initial resolution of the grid is too coarse. This option can also only be used if input geometry comes from an STL file. Microstructures and diatoms are currently not supported.
  • 3 = Distance Between Child and Parent Approximated Geometry: This criteria will test each cell to compute the local interpolated surface for the cell and compare with the surface interpolated for its eight subdivided child cells. If the distance between these two approximated surfaces is greater the the user defined adapt_threshold, then the cell will be uniformly refined. This option can be used with STL and diatom input geometry, but not with Microstructures.
  • 4 = Average Cell Volume Fraction: Each cell of the Cartesian grid is tested to determine if it should be subdivided into eight cells. The volume fraction of the parent cell is compared with the average volume fractions of its eight child cells. If the difference between those two values is greater than the user defined adapt_threshold then the cell is uniformly refined. The adapt_threshold for this case should be a number between 0 and 1.

To maintain a conforming mesh, transition elements will be inserted to transition between smaller and larger element sizes. Default for the adapt_type option is 0 (or that no adaptive refinement will take place).

In all cases the initial Cartesian grid defined by xint, yint and zint or the cell_size value will be used as the basis for refinement and will define the approximate largest element size in the mesh.

adapt_threshold <value>

Default: 0.25 * cell_size / adapt_levels^2

This value controls the sensitivity of of the adaptivity. The value used should be based upon the adapt_type:
  • adapt_type options 1,2,3: For these options, the adapt_type selected represents an absolute distance between surfaces or facets. Where the distance exceeds adapt_threshold the nearby cell or cells will be identified for refinement. The smaller this number the more sensitive will be the adaptation and greater the resulting number of elements. If not specified, the adapt_threshold will be determined as follows:

    adapt_threshold = 0.25 * cell_size / adapt_levels^2

  • adapt_type option 4: The adapt_threshold value in this case represents the the maximum difference in volume fraction between a parent cell and the average of its eight child cells. This value should be between 0.0 and 1.0. The smaller the number, the more sensitive will be the adaptation and the greater the number of resulting elements. A default adapt_threshold of 0.01 is used if not specified.

Note that the user defined adapt_threshold may not be satisfied everywhere in the mesh if the value defined for adapt_levels is exceeded.

adapt_levels <value>

Default: 2

The maximum number of levels of adaptive refinement to be performed. One level of refinement will split each Cartesian grid cell identified for uniform refinement into eight child cells. Two levels of refinement will split each cell again into eight, resulting in sixty-four child cells, three levels into 256, and so on. The maximum number of subdivision per cell is give as:

number of cells = 8^adapt_levels

The minimum edge length for any cell will be given by:

min cell edge length = cell_size / adapt_levels^2

The actual number of refinement levels used will be determined by whether all cells meet the adapt_threshold, or the adapt_levels value is exceeded. The default adapt_levels is 2. Note that setting the adapt_levels more than 4 or 5 can result in long compute times.

combine

Default: OFF (will not be combined)

If the combine option is used, following execution of Sculpt, the resulting exodus meshes will be combined using the epu seacas tool. Note that epu should be installed on your system and the path to epu defined using the sculpt parallel path command. If not used, files will not be combined. Epu is a code developed by Sandia National Laboratories and is part of the SEACAS tool suite. It combines multiple Exodus databases produced by a parallel application into a single Exodus database. The epu program should be included with distributions of Cubit beginning with Version 15.0.
import

Default: OFF (will not be imported)

If the import option is used, following execution of Sculpt, the result will be imported into Cubit as a free mesh. If the combine option has not been used, then multiple free meshes will be imported with duplicate nodes and faces at processor domain boundaries. Otherwise a single free mesh, the result of the epu code, will be imported. Note that the resulting mesh will not be associated with the original geometry, however Block (material) definitions will be maintained. In addition a separate group will be generated for each imported mesh (One per processor).
show

Default: OFF (will not display output)

If the show option is used, while the external Sculpt process is running, output from the Sculpt application will be echoed to the Cubit command window. This option is only effective if the no_execute is not used.
clean

Default: OFF (temporary files will not be deleted)

If the clean option is used, temporary files generated during the sculpt parallel command will be deleted. This includes any exodus mesh files, .stl, .diatom, .log and .run files.
gen_input_file <file name>

Default:No input file generated

An input file with the given file name will be generated when the command is executed. This is a text file containing all sculpt options used in the command. The input file is intended to be used for batch execution of sculpt. To run sculpt from the operating system command line you would use the -i option. For example: sculpt -i myinputfile.i -j 4 where myinputfile.i is the name of the input file specified with the gen_input_file option and -j 4 is the number of processors to use.

Sculpt Parallel Path Command

The command for letting Cubit know where the Sculpt and related applications are located is:

 Sculpt Parallel Path [List|Psculpt|Epu|Mpiexec]

This command defines the path to psculpt, epu and mpiexec on your system. In most cases, however, these paths should be automatically set provided Sculpt was successfully installed with your Cubit installation. The list option will list the current paths that Cubit will use for these tools. If an alternate path to these executables is desired, it is recommended that this command be used in the .cubit initialization file so that it wont be necessary to define these parameters every time Cubit is run.

Sculpt Mesh Quality Control

In most cases, the Sculpt tool can be used without adjusting default values. Depending on the characteristics of the geometry to be meshed, the default values may not yield adequate mesh quality. Upon completion, Sculpt reports to the command line, a summary of the mesh that was generated. This includes a summary of the mesh quality. Care should be taken to review this summary to ensure the minimum mesh quality is in a range suitable for analysis.

The element metric used for computing mesh quality in Sculpt is the Scaled Jacobian. This is a value between -1 and 1 that is a relative measure of the angles at the element's nodes. A value of 1 indicates a perfect 90 degree angle between each of its edges. In most cases a value less than zero, or negtive Jacobian element, indicates an unusable mesh. Sculpt's default settings try to achieve a minimum Scaled Jacobian of 0.2, which is normally usable in most analysis. The following discussion provides several options for adjusting the model or Sculpt parameters to help improve mesh quality.

  1. Locating poor mesh quality: When the Sculpt mesh has been imported back into CUBIT it is a good idea to display the element quality. You can do this with variations of the following commands:

     quality hex all scaled jacobian
    quality hex all draw mesh

    Identify regions where hexes are poor quality and zoom in to these regions.
  2. Modifying the geometry: Zooming in to poor quality elements may reveal that the mesh does not adequately represent the underlying geometry. In some cases you may find that small features, or small gaps between parts may be on the order of the size of the Sculpt cell size. If these features are not important to the analysis, you may consider using Cubit's geometry modification tools to remove features or close small gaps.
  3. Modifying the cell size: In cases where small geometric features or gaps are important to the simulation, it may be necessary to use a smaller base cell size. Use the size or autosize input parameters or increase the numbers of intervals. Normally to adequately capture a feature you would want the cell size to be no greater than about 1/3 to 1/2 the size of the smallest feature you would want to represent in the simulation.
  4. Turning on Pillowing for multiple materials: For models that have more than one material that share an interface, unless the geometry is precisely aligned with the global axis, it is usually a good idea to turn on pillowing. Pillowing automatically inserts an additional layer of hexes at interface boundaries to improve mesh quality. Without pillowing may notice inverted or poor quality elements at curve interfaces where 2 or more materials meet.
  5. Modifying smoothing parameters: Sculpt includes a tiered approach to smoothing to improve element quality. It starts by applying smoothing to all nodes in the mesh and progressively restricts the smoothing operations to only those nodes that fall below a user-defined scaled Jacobian threshold. Default numbers of iterations and thresholds for each smoothing phase have been tuned for general use, however it may be worthwhile to adjust these parameters. The three smoothing phases include: Observing the mesh quality output to the command line following each smoothing iteration can provide some insight on the effect of modifying smoothing parameters.
  6. Creating degenerate hexes: Some geometries will not permit a usable mesh with a traditional all-hex mesh. Sculpt includes the option to automatically and selectively collapse element edges to improve low-quality elements. The max_deg_iters and the deg_threshold values are used to control the creation of degenerates. Degenerate elements are treated as standard hex elements, but use repeated nodes in the eight-node connectivity array.
  7. Creating hex-dominant mesh Another option for avoiding mesh quality issues is to generate a few tet elements in the mesh using the htet option. With this option you can specify a scaled Jacobian threshold value below which hexes will be converted to tet elements. The interface between hex and tet elements is managed by an automatically defined set of nodesets and sidesets that describe where multi-point constraints will be applied.

Sculpt Examples

The following examples use this simple geometry. Execute these commands prior to performing the example Sculpt Parallel command line operations

 sphere rad 1
sphere rad 1
vol 2 mov x 2
cylinder rad 1 height 2
vol 3 rota 90 about y
vol 3 mov x 1
unite vol all

Sculpt example geometry

Figure 1. Geometry created from the above commands and used for the following examples.

Basic Sculpt

This example illustrates use of Sculpt with all default options. So that we can view the result, we will also use the overwrite, combine and import options.

 sculpt parallel over combine import
draw block all

The result of this operation is shown in Figure 2. For this example, behind the scenes, Cubit built an input file for Sculpt, ran it on 4 processors, combined the resulting 4 meshes, and subsequently imported the resulting mesh into Cubit. Note that Volume 1 remains "unmeshed" and we have created a free mesh that is not associated with a volume. The result of any Sculpt command is always an unassociated free mesh.

Meshed example geometry

Figure 2. Free mesh generated from sculpt command

Size and Bounding Box

This example illustrates the use of the size and box options

 delete mesh
sculpt parallel size 0.1 box location position -1.5 0 -1.5 location position 1 1.5 0 over import combine
draw block all

In this case we have used the size option to define the base cell size for the grid. We have also used the box option to define a bounding box in which the mesh will be generated. Any geometry falling outside of the bounding box is ignored by Sculpt. Figure 3 shows the mesh generated with this command.

Meshed example geometry

Figure 3. Sculpt "box" option limits the extent of the generated mesh.

Meshing the Void

In this example we illustrate the use of the void option:

 delete mesh
sculpt parallel size 0.1 box location position -1.5 0 -1.5 location position 1 1.5 0 over import combine void
draw block all

The result is shown in figure 4. Notice that this example is precisely the same as the last with the exception of the addition of the void option. Mesh is generated in the space surrounding the volume out to the extent of the bounding box. In this case, an additional material block is defined and automatically assigned an ID of 2. The nodes and element faces at the interface between the two blocks are shared between the two materials.

Meshed example geometry

Figure 4. Sculpt "void" operation generates mesh outside the volume.

Automatic Sideset Definition

In this example we illustrate the use of the sideset option.

Generating sidesets on the free mesh with Cubit: Sideset boundary conditions can be manually created on the resulting free mesh from Sculpt using the standard Sideset <sideset_id> Face <id_range> syntax. The Group Seed command is also useful in grouping faces based on a feature angle to be used in a single sideset.

Generating sidesets in Sculpt: Sculpt also provides several options for defining sidesets as part of the Sculpt run. The following illustrates one option:

 delete mesh
sculpt parallel size 0.1 box location position -1.5 0 -1.5 location position 1 1.5 0 over import combine void sideset 2
list sideset all
draw sideset all

Once again we use the same syntax but add the sideset 2 option to automatically generate a series of sidesets. The list command should reveal that 10 sidesets were defined for this example with IDs 1 to 10. Figure 5 shows the result of the draw command showing all of the sidesets in different colors. Note that for the sideset 2 option, sidesets are created with the following criteria:

See the sideset option above for a description of other options for generating sidesets in Sculpt.

Meshed example geometry with side sets

Figure 5. Automatic sidesets created using Sculpt

Running Sculpt Stand-Alone

This example illustrates how to set up the files necessary to run Sculpt as a stand-alone process. This can be done on the same desktop machine or moved to a larger cluster machine more suited for parallel processing.

Begin by setting your working directory to a location that is convenient for placing example files

 cd "path/to/my/sculpt/examples"

Next we issue the basic sculpt parallel command to mesh the volume

 delete mesh
sculpt parallel processors 8 fileroot "bean" over no_execute

In this case, we used the no_execute option which does not invoke the Sculpt application. Instead it will write a series of files to the working directory. The fileroot option defines the base file name for the files that will be written; in this case "bean". We also use the processors option to set the number of processors to be used to 8.

To see the files that Cubit placed in the working directory, bring up a terminal window on your desktop and change directories to the current working directory (ie. cd path/to/my/sculpt/examples). A directory listing should reveal 3 files as shown in Figure 6.

Directory listing

Figure 6. Directory listing of files written from Cubit

The following describes the purpose of each of the resulting files:

Sculpt command line

Figure 7. Unix command line for running Sculpt generated by Cubit

To run sculpt on the same machine, from the terminal window in your current working directory you would issue the following command:

 ./bean.run

If Sculpt is to be run on a different machine, copy the files in the working directory to the other machine and issue the same command. Remember to change the path to the mpiexec and psculpt executables to match those on the new machine. For running on cluster machines that have scheduling of resources, check with your system administrator for how to submit a job for running.

After running Sculpt, Figure 8 shows the resulting files that would be written to the current working directory.

Sculpt command line

Figure 8. 8 Exodus files were generated and placed in working directory

Note that 8 exodus files have been generated, 1 from each processor. These files can be used by themselves or used as-is for use in a simlation, or they can be combined into a single file. The exodus files produced by Sculpt include all appropriate parallel communication information as defined by the Nemesis format. Nemesis is an extension of Sandia's Exodus II format that also includes appropriate parallel communication information.

To combine the resulting exodus files into a single file, we can use the epu tool. Epu should be included in your Cubit distribution, but may require you to set up appropriate paths for it to be recognized. To run epu on this model, use the following command from a unix terminal window:

 epu -p 8 bean.diatom_result

The result should be a single file with the name bean.diatom_result.e. The mesh in this file can then be imported into Cubit. Switch back to your Cubit application and from the command line type the following command:

 import mesh "bean.diatom_result.e" no_geom

The result should be the same mesh we generated previously that is shown in Figure 2.

Meshing Multiple Materials With Sculpt

This example illustrates using Sculpt to mesh models with multiple materials. To begin with, we will modify our current model by adding some additional volumes. Use the following commands:

 delete mesh
cylinder rad 0.5 height 3
cylinder rad 0.5 height 3
vol 5 mov x 2

The resulting geometry should look like the image in Figure 9.

Geometry for multi-material

Figure 9. Geometry used to demonstrate multiple materials with Sculpt

Use this geometry to generate a mesh using Sculpt.

 sculpt parallel size 0.075 over combine import
draw block all

The resulting mesh should look like the image in Figure 10.

Mesh of multi-material

Figure 10. Mesh generated on multiple materials

Notice that one mesh block per volume was created. We should also note that no boolean operations were performed prior to building the mesh with Sculpt. In fact, volumes 4 and 5 were significantly overlapping volume 1. This would be an invalid condition for normal Cubit meshing operations. Figure 11 shows a cut-away image of the mesh using the Clipping Plane tool.

Mesh of multi-material

Figure 11. Cut-away of mesh generated on multiple materials

We should also note that imprint/merge operations typically needed, were also not required. While it is usually best to avoid overlaps to avoid ambiguities in the topology, Sculpt is able to generate a mesh giving precedence to the most recently defined materials. Merging is performed strictly by geometric proximity. Volumes closer than about one half the user input size will normally be automatically merged.

Next, we will examine the mesh quality of the free mesh. The following command will display a graphical representation of the Scaled Jacobian metric.

 quality hex all scaled jacobian draw mesh

The result is shown in Figure 12. Note the elements (colored red) at the interface between materials are unacceptable for simulation. This is caused by the Sculpt algorithm projecting nodes to a common curve interface shared by the materials.

Mesh quality

Figure 12. Mesh quality of multi-material mesh.

In most cases, the poor element quality at material interfaces can be improved by using the pillow option. Adding this option will direct Sculpt to add an additional layer of elements surrounding each surface. To see the result of pillowing, issue the following commands:

 delete mesh
sculpt parallel size 0.075 over combine import pillow 1
quality hex all scaled jacobian draw mesh

Mesh quality

Figure 13. Mesh quality of multi-material mesh using pillow option

The resulting mesh is showed in Figure 13. Note the improved mesh quality at the shared curve interface. A closer look at the mesh, shown in Figure 14. reveals the additional layer of hexes surrounding each surface that allows for improved mesh quality when compared with Figure 11. When generating meshes with multiple materials that must share common interfaces, the pillow option is usually recommended.

Pillow layers

Figure 14. Cutaway of mesh reveals the additional layer of hexes surrounding each surface when the pillow option is used.