How to create complex geometry with booleans in Abaqus

In some cases the geometry of a finite element model cannot be obtained from basic operations like extrusions, revolutions, or sweeps. If we want to generate many more types of geometries it is necessary to use other tools such as boolean operations.  These utilities take advantage of two basic operations: union and substraction (intersection is a combination of them). The combination of these operations together with simple parts, makes possible the generation of extremely complex geometries. Geometries that cannot be obtained from basic operations (extrusion, revolution…).

Abaqus provides these boolean operations in the Assembly module between instances. Therefore, we need to generate parts with the basic geometry, create the instances of these parts and finally apply the boolean operations.

1. Booleans in Abaqus

Boolean operations are applied to many different types of geometries. For instance, I have used it many times to create complementary parts of some complex geometry in 2D and 3D (e.g. the matrix of a reinforced material). In fact, in 3D models there is no other way to do it.

Complex geometries generated using booleans in Abaqus

Examples of FE models obtained using boolean operations in Abaqus: 3 representative volume elements of composites reinforced with particles and short fibers, and a mesoscale woven model. The geometry of the yarns of the woven ply was generated using Texgen.

To access the boolean tool, we have to create at least two instances in the Assembly, and then select the option “Merge/Cut“. You can access from the vertical toolbar or through the menu: Instances → Merge/Cut…

Then, a dialog will open to select the type of boolean operation:

  • Merge (union)
  • Cut (substraction)

The result will be a new instance, and we have the option to keep the original instances (suppress) or remove them (delete).

abaqus merge cut instances

After making the boolean operation, we obtain a new instance and a new part as well. So we can mesh the new part, create partitions, sets, surfaces, assign sections, orientations, etc.

2. Abaqus booleans in Python scripts

There are two functions at the assembly level to make boolean operations: In the next example, we show how to merge some instances using the first function:
				
					# Typical imports to run Abaqus commands
from abaqus import *
from abaqusConstants import *
from caeModules import *
 
# Creation of the parts
# ...
# ...
# ...
 
# Assembly
a = mdb.models['Model-1'].rootAssembly
 
# Create some instances
inst1 = a.Instance(name='Part-1', part=part1)
inst2 = a.Instance(name='Part-2', part=part2)
inst3 = a.Instance(name='Part-3', part=part3)
 
# We can translate and rotate the instances if we wish before the boolean
 
# Merge all instances
instances_to_merge = [inst1, inst2, inst3]
instance_merged = a.InstanceFromBooleanMerge(name='Merged-Instance', 
                                             instances=instances_to_merge)
				
			
  • Lines 1 to 4: Standard imports to run Abaqus commands.
  • Lines 6 to 9: Creation of the parts (omitted for the example).
  • Line 12: Define ‘a’ as the rootAssembly.
  • Lines 15 to 17: create 3 instances from 3 parts.
  • Line 19: We can modify the position and rotation of the instances before applying the boolean.
  • Line 22: Create a list with the 3 instances.
  • Lines 23 and 24: Create a new instance by merging the 3 instances (passed as a list).
In the code snippet below, I show a brief example to use the InstanceFromBooleanCut function in a Python script for Abaqus:
				
					# Create some instances
inst1 = a.Instance(name='Part-1', part=part1)
inst2 = a.Instance(name='Part-2', part=part2)
inst3 = a.Instance(name='Part-3', part=part3)
 
# We can translate and rotate the instances if we wish before the boolean
 
# Cut inst1 using inst2 and inst3
instance_cut = a.InstanceFromBooleanCut(name='Cut-Instance', 
                                        instanceToBeCut=inst1, 
                                        cuttingInstances=[inst2, inst3])
				
			
  • Lines 2 to 4: create 3 instances from 3 parts.
  • Lines 9 to 11: Create a new instance by cutting inst1 using inst2 and inst3.

3. What about intersections?

The boolean operations available in Abaqus are merge and cut, but there is no intersection option. To make an intersection we can combine the merge (+) and cut (-) operations to obtain an equivalent result. In the example below, the intersection of A and B is F (in yellow).

combining union and substraction operations to obtain intersection

In this script you can see how to combine everything to compute the intersection between a sphere and a cylinder. The final geometry cannot be obtained using basic CAD operations.

boolean intersection in Abaqus

4. Let's put it in practice!

In the following video you will see a complete demonstration on how to apply boolean operations to generate a 3D model with a complex geometry taking advantage of boolean operations built in Abaqus.

If you are interested in Abaqus Scripting with Python, take a close look at the script to generate the final FE model. You will find many advanced features of the preprocessing stage, like partitioning the part of the particle. And of course, if you have any question leave it in the comments section below.

And if you want to get started in Abaqus Scripting with Python check out this post to learn how to create your own scripts.

I hope that you find these tips useful!

Leave a Comment

Scroll to Top