Working with Meshes

A Mesh record defines the Coreform IGA discretization for one Abaqus part or independent assembly instance. Each valid owner stores at most one persistent Mesh.

1 Choose the Mesh owner

A part and all its assembly instances form one ownership family. Store the Mesh according to that family’s dependency state:

Part-family state Mesh owner
The part has no instances The part
All instances are dependent The part; its Mesh governs the dependent instances
All instances are independent Each independent instance that needs a Mesh

Part-owned and instance-owned Meshes cannot coexist in one family. A dependent instance cannot own a Mesh directly, and an independent instance cannot use a Mesh stored on its part.

2 Choose the Mesh type

An ImmersedRectilinearMesh creates a rectilinear background discretization trimmed to the owner’s geometry. Choose exactly one sizing strategy: element size, total interval counts, or per-axis interval counts. You can provide a complete coordinate frame or let Coreform derive one from the owner.

A BodyFitMesh records a body-fitting intent and does not accept the rectilinear sizing, layout, padding, or frame controls.

3 Create and resolve an immersed Mesh

from abaqus import mdb
import coreform.abaqus

coreform.abaqus.init_iga_mdb()

model = mdb.models["Beam"]
part = model.parts["Beam"]
meshes = part.customData.CoreformIGA

mesh = meshes.ImmersedRectilinearMesh(
    degree=2,
    continuity=1,
    elementSize=(0.5, 0.5, 0.5),
    elementLayout=("node_centered",) * 3,
    smallCellVolumeRatio=0.2,
)

mesh.setValues(
    degree=3,
    continuity=2,
    elementSize=(0.25, 0.25, 0.25),
)

resolved = mesh.resolveForOwner()
print(resolved.frame.origin)
print(resolved.frame.basis)
print(resolved.extents)
print(resolved.padding)

toSpec() preserves automatic frame and padding fields as None. resolveForOwner() returns a portable specification with owner-dependent values materialized without changing the stored Mesh.

4 Replace or remove a Mesh

Creating a second Mesh on the same owner normally raises ValidationError. Use overwrite=True when replacement is intentional; the candidate is fully validated before the existing record changes.

replacement = meshes.BodyFitMesh(
    degree=2,
    continuity=1,
    overwrite=True,
)

meshes.deleteMesh()

See the Abaqus Mesh reference and portable Mesh reference for exact constructors, sizing and frame groups, record attributes, and namespace operations.