Automating Complex Volume Subtraction with Problematic Geometry – Seeking Efficient Solutions

Hello,

I am working with Cubit and trying to automate a process involving volume subtraction, but I am encountering several issues related to problematic geometry. I would like assistance from an expert to understand how to resolve these issues efficiently, as doing it manually for each volume is not practical given the large number of volumes I am working with.

Objective: I have a set of solid volume elements representing a damaged state in my simulation. I created a new volume, and I want to subtract all the other existing volumes from this new volume. The outer shape of the subtracted volumes is essential as it represents a damage pattern crucial for my analysis. However, these volumes are problematic; they may:

  • Penetrate each other
  • Have small gaps between them
  • Be very thin or flat

While their geometry is imperfect, their overall arrangement is necessary to represent the damaged state accurately.

Steps I Followed:

  1. Created a New Volume:
  • This is the volume from which I want to subtract all the other smaller volumes.

I’v attached the small example and the real volumes I need

  1. Subtraction Attempt:
  • Command: subtract volume [range of volumes] from volume [main volume]
  • This operation fails with several errors like:
    • Coincident face intersections
    • Non-manifold edges
    • Inconsistent face-body relationships
  1. Validation and Geometry Checks:
  • Validate volume all – Revealed multiple issues (zero volume, bad surfaces, duplicate vertices, bad edges, etc.)
  • Quality volume all – Highlighted thin regions and problematic areas.
  • Intersect volume all – Showed that some volumes intersect with each other.
  1. Manual Fixes:
  • Reversing surfaces for orientation issues.
  • Deleting and recreating volumes from surfaces.
  • Addressing individual volume issues (works but is not feasible due to the large number of volumes).
  1. Tolerance Adjustments:
  • Healer Default StitchMinTol 0.001
  • Healer Default StitchMaxTol 0.05
  • Healer Autoheal Volume all
  • tolerance boolean 0.001
  • This did not resolve the subtraction issues.
  1. Additional Checks and Attempts:
  • List edge all and list edge with problems.
  • Thicken sheet body all by 0.001 (did not work as they are solids)
  • Boolean unite volume all (failed with similar geometry issues)
  1. Partial Success:
  • When I manually fix specific problematic volumes and subtract them individually, it works.
  • When I attempt to subtract the entire range of volumes at once, I get error messages, but a new volume is still created. Was the subtraction fully successful?

Current Roadblock:

  • Manually fixing each volume is time-consuming and impractical for my large dataset.
  • Automated healing and tolerance adjustments did not solve the subtraction issues.
  • I need an efficient and automated workflow to handle these problematic volumes and perform the subtraction.

Request:

  • Are there any specific best practices or tools in Cubit to automatically resolve volume issues before Boolean operations?
  • Can the subtraction process be made more robust for imperfect geometries?
  • Is there a more efficient workflow to handle intersecting or nearly coincident volumes without manually fixing each one?
  • How can geometry be simplified? Is it possible to remesh a meshed volume? I converted the meshing to volumes because I didn’t find a way to remesh.

I would appreciate any advice or guidance on how to proceed. If needed, I am open to discussing this further in a Zoom meeting.

Thank you for your support!

Best,

Gili Lifshitz Sherzer
Small model just for quick testing

See attached to attempts to heal on a small sample, and the target model to repair and fix before subtracting, the best is to combine them into one volume before subtracting but this also didn’t work.
TargetModel.zip (257.1 KB)
AttemptsToHeal3NT.cub5 (4.9 MB)

Hello @sherzerg,
the target model seems to be empty. It doesn’t contain a geometry or mesh.
grafik

But i can open the second one. From what i see the geometry makes a lot of trouble and that most likely can’t even be fixed with manual work.

So the big question for me right now is, how are you creating or getting the volumes that you would like to substract.

For me it looks like you are running a simulation that got a tet mesh as input and you would need to erase specific elements (based on results) after each run. In this case it would be good to understand where your data comes from and how your final mesh should look. Could you give me a description of what you are trying to setup here.

Hi Norbert,

Thank you for your response and for looking into the models.

I am working on a project that involves post-analysis geometry reconstruction. The goal is to simulate a structure that has undergone damage, introduce rehabilitation elements into the damaged region, and then rerun the mechanical model on the updated structure to assess the effect of the repairs.

To give you a clear view of my workflow and the specific issue I’m facing, here are the steps I followed:

1. Initial Attempt:

After running the initial simulation, I tried to rerun the model with the deformed mesh as it is, but the solver flagged issues related to orphan elements, causing the run to fail.

image

2. Extracting the Damaged Geometry:

I imported only the damaged elements from the deformed mesh into Cubit and converted these elements into solid volumes to represent the cracked and failed regions.

3. Reconstructing the Surrounding Volume:

I then recreated the surrounding undamaged structure as a separate volume (representing the intact concrete) based on the original geometry but conforming to the damaged region.

4. Subtraction to Represent the Damage:

The next step is to subtract the damaged volumes from the reconstructed surrounding volume, leaving a void in place of the damaged geometry, or alternatively keep the damaged volumes integrated with the surrounding volume as distinct parts that will later be remeshed together, accurately representing the damage state

5. Final Meshing and Model Update:

After this subtraction, the plan is to remesh the resulting structure and introduce supporting/rehabilitation elements in the damaged zones before rerunning the mechanical analysis.

Key Issue:

The problem arises during the subtraction step. The deformed elements often lead to problematic geometries, such as:

· Penetrating/intersecting volumes

· Small gaps between volumes

· Extremely thin or flat features

These geometric issues frequently cause the Boolean subtraction operation to fail, even after multiple attempts with different approaches, including:

· Auto-healing and adjusting tolerances (Healer Default StitchMinTol / StitchMaxTol)

· Validating and analyzing volume quality

· Setting Boolean tolerances

· Manual surface reversal and volume recreation

· Working on individual volumes (which works but is not feasible due to the large number of volumes)

What I Need:

I’m seeking guidance on best practices or a recommended workflow in Cubit to handle post-simulation deformed geometries efficiently. I can also somehow recreate the geometry and remesh it.

If you have alternative approaches for transitioning from deformed mesh output to a clean, solid model suitable for further meshing and analysis, that would also be very helpful.

If you need to get rid of some elements, that’s also an option.

I have all the files from this process, so let me know if you need anything specific, such as the meshing file or solid elements of the surrounding undamaged structure.

I’m open to any suggestions you might have regarding the workflow or automated methods to handle the volume subtraction process in cases with complex or imperfect geometry.

The target model can be opened but its heavy file, I’m attaching its Step file that can be imported to Cubit.

[image]Target_Model001 (Solid).step

Target_Model001 (Solid)

Thanks so much for your help!

Best,

Gili

Hi @sherzerg,
i don’t have access to your share point. Could you please use https://transfer.coreform.com/ to share your file.

Could you also share the file that you are actually importing before creating the volumes? Also the mesh after your first run would be good.

I am currently not sure if your picture shows very malformed tets or if those are tris.

Hi Norbert,

Yes, you are correct, while working through the process, I identified an issue—when converting the extracted fracture geometry to the *e file, it seems to flatten the elements, which is a problem. I attached only the surrounding geometry in *e format (of a large cube jest to see if we have a solution), which can be imported into Cubit. (the file is attached to the email)

Since the fracture extraction process flattens the elements, I was wondering if there’s a way in Cubit to:

Convert the surrounding geometry into volumes, unite them, and remesh—so we obtain the post-fracture geometry while keeping its integrity.

Alternatively, peel the inner structure, keeping only the outer nodes, and remesh from them.

pre-processing the geometry may require Python within Cubit. Perhaps a loop over volumes could help extract the fracture surface.

I will appreciate any of your recommendations.

Thanks,

Gili

Hi Gili,
i opened the exodus file that you send via mail.

The tets aren’t sharing any nodes with their neighbours.

When i import the file and let the volumes create, i will get a volume for each tet because they are not connected.

I am really curious how your input mesh looks. Are you performing a simulation where the elements doesn’t share a node? Or is it because of the result output?
Or is you solver unmerging single elements when they are damaged enough?

We would either need a way to know the fractured elements and delete or deactivate them from the input mesh. Or the other option would be to somehow create a geometry that can be meshed. But think the a traditional tetmesh will probably not work here for remeshing. And i would either go for sculpt or something like in this post . Remeshing this way has the downside that the input volume size will not equal the output volume size. So we either win or lose tiny volume fractions.

If the deformations are stored in the Exodus file, you can use the Advanced Options on Exodus import and deform the geometry on import. From what Norbert mentions, you may also have to merge the nodes on import.

If the deformations are not stored in the Exodus file, you could use exodus.py to add them in.

Create this as mesh based geometry, delete the mesh and remesh the deformed volume with the tetmesher.

This is the general process. I haven’t looked at your specific problem.

Karl