Manually fixing an intersection in Gocad
The mutual intersection in Gocad is the keystone of our geometry
building framework, but is also the bottleneck. In fact, it is a black
box, which fails in given geometric configurations: Sometimes it
generates tiny holes preventing building a volume out of the surfaces,
or it creates tiny misoriented faces, that cannot be attached to an
existing surface, and then lead to very small time steps, so small
that they impact the simulation time even with local time stepping
enabled. So far, we did not find any better solution than fixing
manually the geometry.
Here we detail a systematic way of fixing the intersection, using a
realistic example. We then try to intersect a complex fault system
(yellow and orange surfaces, about 250k triangles) with a finely
meshed topographic surface (blue surface, about 1M triangles).
The first step of the workflow is to carry out the intersection, to
visualize the problematic area of the mesh to be fixed.
Surface>Tools>Cut>Mutual cut among surfaces>select the surface and
The next step is to import the intersected surfaces in SimModeler.
Then we use the standard procedure:
File > Export > Gocad ASCII > choose a filename (example test.ts).
We then convert the ts file to stl using convertTs.py:
python convertTs.py test.ts
Finally we import the stl file in SimModeler using:
File > Import Discrete Data > unclick all option, select file and
click on OK.
Now let’s check for small features in the geometry:
Model Tab > Remove Small Features > Find (note that we do now remove
the small features here, but we only localize them).
SimModeler will list faces and edges. Nevertheless, we only focus on
the faces, the edges being usually the edges of the faces listed.
Graphic search for the small features
At this point, one possible option is to select one of the small feature,
click on focus on selected, and then try to zoom out to see where the
face is located. In practice, it might not be so easy. Once you have
localized the face in SimModeler, you can try to find it in gocad by
playing with the light. In fact, the small features have usually a
different normal orientation that the surrounding faces, and their edges
may be visible under certain light incidences. Here is an example of 2
features poping out:
meshing the small features to get their coordinates
A preferable option, because more systematic, for localizing the small
features is to mesh them in SimModeler, export the mesh in an ascii file, and read the node’s coordinates.
Then mouse over the intersected surface, along the intersection line up to each of the coordinates.
To mesh them, click on each small features faces, and choose ‘Use
discrete Geometry mesh’. Then click on all other faces, and choose ‘No
mesh/Entity’. Finally, remove the ‘Volume meshing’ attribute, and click on ‘Generate Mesh’. The surface mesh can then be exported:
File>Export Mesh> Format ABAQUS 2D (for instance), enter a filename
The ascii mesh look like that:
1, 6186870.5469, -3926750.75, 134.60108948
2, 6190219.5312, -3912085.8125, 950.25006104
3, 6127079.0312, -3952731.3125, 411.05957031
236, 6101705.5938, -3992835.8125, 297.36010742
237, 6099955.5938, -3962585.8125, 595.60552979
*Element, Type=S3R, Elset=gface2
34279, 42, 59, 4
329262, 2, 59, 42
*Element, Type=S3R, Elset=gface3
550757, 1, 30, 31
1011559, 31, 30, 8
*Element, Type=S3R, Elset=gface4
909933, 5, 86, 6
It features 237 nodes, but actually only 5 faces. We then look for the
coordinates of each face’s node, here, for instance, the coordinates of
Fixing the intersection
Now that the small features have been localized, we will try to fix
them. To do that we first load the gocad model prior to the
intersection, and we also load the intersected surfaces (previously save
in a ts file), to keep track of the localization of the small features.
Then for each small features, we identify why the intersection failure,
and we amend the triangulation, to remove the cause of the failure.
Usually, the failure is due to intersecting or almost intersecting
edges. For instance here:
We see that the small feature seems related to the edge intersection
circled. We then switch 2 triangles of the blue surface sharing the incriminated edge, which has the virtue of moving the edge.
For that we use (for instance):
Right-click on the surface>Tools>Triangles>Switch Triangles> click on
When then apply this manual procedure on all detected small features,
and we finally make the mutual intersection. Hopefully, the model once loaded in SimModeler is then free of small features!