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.
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).
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
- InstanceFromBooleanMerge: merges multiple instances into a single one
- InstanceFromBooleanCut: cuts one instance using one or more instances
- Python
# 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).
- Python
# 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).
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.
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!