13 Coreform Lattice GC
Coreform Lattice GC™ is a new product introduced in Coreform Cubit™ 2021.11 that implements Geometry-Compliant lattice structures. The geometry-compliant lattice structure technology defines the layout and shape of a lattice structure using a finite-element mesh into which a lattice is embedded. Each mesh element is assigned a lattice unit cell, and the element’s Jacobian applies a deformation to its unit cell which results in a deformed unit cell. In Coreform Lattice GC, a U-spline is used as the embedding mesh, enabling the construction of lattice structures with smooth intercellular interfaces and high-accuracy compliance to the CAD geometry on which the U-spline is built. Example workflows for building these lattice structures can also be found in the Cubit Workflows section under Building U-spline lattices.
13.1 Lattice GC command reference
13.1.1 build uspline lattice
Summary: These commands will create and slice a U-spline lattice structure given an embedding U-spline mesh and a reference cell tessellation. There is one command for uniform slicing and two variations for non-uniform slicing; one uses the -coordinates of the slice planes, and the other uses an offset and the spacing between planes.
[build] uspline lattice {<string>uc | <string>tess file path} <integer>base spline id [uniform_spacing <real>slice_plane_separation_value] [offset <real>first_slice_zcoordinates] [cap_offset <real>boundary_cap_offset] [fit_slices <boolean>fit_slices] [num_procs <integer>number_of_processors] [filename for slices <string>cli_output_file_path] [filename for vtk vis <string>vtk_output_file_path] [filename for obje vis <string>obj_output_file_path] [floating_point_tol <real>tolerance] [<boolean>visualize_only]
[build] uspline lattice nonuniform_zcoord {<string>uc | <string>tess file path} <integer>base spline id [zcoords <real>slice_plane_zcoordinates] [cap_offset <real>boundary_cap_offset] [num_procs <integer>number_of_processors] [filename for slices <string>cli_output_file_path] [filename for vtk vis <string>vtk_output_file_path] [filename for obj vis <string>obj_output_file_path] [floating_point_tol <real>tolerance] [<boolean>visualize_only]
[build] uspline lattice nonuniform_spacing {<string>uc | <string>tess file path} <integer>base spline id [nonuniform_spacing <real>slice_plane_separations] [cap_offset <real>boundary_cap_offset] [num_procs <integer>number_of_processors] [filename for slices <string>cli_output_file_path] [filename for vtk vis <string>vtk_output_file_path] [filename for obj vis <string>obj_output_file_path] [floating_point_tol <real>tolerance] [<boolean>visualize_only]
One may use one of the four reference cells packaged with Cubit or pass a user-defined reference cell. To use a packaged reference cell, the uc should be the keyword and one of "jack", "octettruss", "truncatedsphere", and "pvb" should be the specifier string.
To use a user-defined reference cell tessellation, the tess file path should be the keyword and a valid specifier string is the filepath to the tessellation JSON file. The file path may be absolute or relative to the Cubit run directory.
For uniform slicing, the uniform_spacing sets the spacing (distance) between slice planes. If the uniform_spacing keyword is not present, then a default value of 0.025 will be used. If provided, fit_slices will adjust the spacing so that the planes exactly fit the geometry.
For non-uniform slicing, the nonuniform_zcoords sets the -coordinates of the slice planes as a space-separated list. For example, the command to obtain planes at 0.0, 0.5, and 1.0 is nonuniform_zcoords 0.0 0.5 1.0. Also, for non-uniform slicing, one may use nonuniform_spacing to set the spacing (distance) between slice planes. The syntax is the same as nonuniform_zcoords.
If the spacing between planes is provided, one may provide an offet, which is the position of the slice plane with the lowest -coordinate.
Slice planes are assumed to represent the bottom surface of a slice layer with some non-zero thickness. Consequently, slice planes will only produce slice loops if there is geometry immediately above them. For this reason, a slice plane that is coincident with the maximum coordinate of the embedding mesh will not produce any slice data.
Lowering the slice plane separation will increase the resolution of the resulting slice data, but will require more time to slice. Increasing the slice plane separation can reduce the time to slice, but will decrease the resolution of the slice data and may cause some features to be missed.
The cap_offset is an optional argument that will offset the caps of the reference cell on the boundary of the geometry.
The value given to the num_procs keyword should be an integer value greater than 1 and less than or equal to the number of processors on the machine.
When a value greater than the number of available processors on the machine, the command will attempt to determine and use the maximum number of available processors.
All other invalid entries will revert to the default value, which is 1. When num_procs > 1, the set of slice planes are divided equally among the given processors and are handled in parallel. This can be used to speed up the slicing of large lattice structures.
The value given to the filename keyword should be the quoted string of the file path and filename, including a .cli extension, where the slice data will be stored.
If no filename is specified, the slice data will be written to a file named gcls_cli_output_(timestamp).cli.
The value for both the filename for vtk vis and the filename for obj vis keywords should be the quoted file path string, including the filename with the appropriate extension.
Visualization of large lattice structures can often be slow, with visualization of a .vtk file in Paraview often more performant than visualization of a .obj file in Cubit.
If a filename for a given visualization output format is not specified, then a visualization file will not be written.
The tol keyword will control the tolerance employed for comparing two floating point values during the slicing calculations. These floating point comparisons determine whether or not a slice plane intersects an element, a point lies on a slice plane or two points are considered coincident.
The given value should be a floating point value, and can be expressed in exponential form (e.g. ).
The default value for this parameter is , which has been shown to generally be appropriate when the element size in the embedding mesh is around 1.
In general, the floating point tolerance should increase or decrease with mesh size. A floating point tolerance that is too small or too large for a given element size may lead to situations where valid intersection loops cannot be created, resulting either in a critical error or erroneous data.
If the visualize_only Boolean is present, then slice data will not be calculated nor output. This Boolean must be used in conjunction with at least one of the visualization file name keywords or it will result in an invalid command.
13.1.2 fold uspline lattice ref geom
Summary: This command will partition the input geometry with planes defined by octahedaral symmetry and isolate the surfaces of the fundamental repeating unit into a group called “ folded_surfaces”.
fold uspline lattice ref geom <integer>volume_id [mesh <real>element_size]
The command will perform a check to see if the geometry lies within a unit cube bounding box centered on the origin. If the volume has geometry outside the bounding box, the command will return an error.
The command will not check to see if the geometry has the required octahedral symmetry or if it has geometry on the faces of the bounding box.
It is up to the user to ensure these conditions are met, otherwise the resulting folded tessellation will cause the slicing algorithm to fail or to produce a lattice that is not printable.
If the mesh keyword is present, the command will create a tri-mesh on the folded surfaces using the input element size. If the keyword is not present, the surfaces will not be automatically meshed.
13.1.3 export uspline lattice tessellation
Summary: This command will export the tessellation on surfaces in the input group to a JSON file.
export uspline lattice tessellation group name <string>group_name filename <string>export_file_name
The group_name should be the quoted name of the group containing the meshed surfaces you wish to export.
Typically this will be “ folded_surfaces” because that is the group name created by the fold ref geom command. If that group name is changed, then the parameter input to the export tess command must reflect that change.
The export_file_name string is the quoted file path where the resulting JSON file is to be written.
This can be an absolute path or a path relative to the run directory. The file path must include a .json extension.