I’m trying to run a self-contact simulation in CalculiX for a highly complex deforming shape. In the initial phase I cannot predict which regions will come into contact, so I’m trying the “single contact skin” approach.
Based on a YouTube comment and the related Discourse thread (“Is there an easy way to define self-contact?”), I created only one *SURFACE and used the same surface as both master and slave:
*CONTACT PAIR, INTERACTION=self, TYPE=NODE TO SURFACE, ADJUST=0.1
Sselfcontact, Sselfcontact
I also tried:
TYPE=SURFACE TO SURFACE with the same surface as master/slave
PRESSURE-OVERCLOSURE=LINEAR with a high stiffness (1e13)
PRESSURE-OVERCLOSURE=HARD
In all cases, self-contact is not working (either no contact is enforced or it fails to converge).
What is the recommended way to achieve robust self-contact in CalculiX when you can’t identify contact regions upfront? If “surface-to-itself” is not reliable, what workflow do you recommend (e.g., partitioning the skin into patches and auto-generating contact pairs)?
Did you try to run a model without contacts to see where the part will get in contact, and then re-run but now with contacts defined? Is a rubber part?
Could you at least share a picture of this model ? Perhaps it could be simplified a bit and split into regions for potential contact. I’m not really surprised this approach doesn’t work well. Actually, it would require general contact algorithm, but only Abaqus has it.
Actually, I need to create a large number of samples to train an ML model with random designs and apply general contact, similar to how it is applied in Abaqus. I need to apply contact on all outer surfaces. The samples will have random designs, as shown below.
Yeah they are loaded one by one. I cannot split the surface properly to define the master and slave as I want to automate this process, and I cannot know which surfaces will be in contact initially so I want definite contact on all outer surfaces
Do you compress them from all sides ? How do you determine the regions to apply loading/BCs ? Unless you are using contact with rigid surfaces, for instance.
If you need a free option, use openradioss, (it is for all practical purposes the same as LS dyna but the company open sourced it, presumably to get grad students to develop new materials etc) I am using PrePoMax to build my models and then convert the inp to k files with LS prepost (which is free) and then always some time with the text editor. could also use the student version of Ansys LS dyne, or the solver anyway as the pre-processor is just horrible. I have the license and am still using PrePoMax
At first, I tried to verify whether self-contact actually works by running a simple simulation using a plate with a hole placed between rigid plates. I defined the surface using the hole nodes and assigned the same surface as both the master and slave. Initially, the simulation failed badly, but I was eventually able to get it working by tuning the pressure-overclosure linear stiffness and using very small step increments. However, there is a huge difference—on the order of 10^3—in the von Mises stress values when I compare the results with Abaqus.
plate with a hole: Plate_with_hole - Google Drive
Thanks for the suggestion. I’m trying to move a contact-heavy case from CalculiX (plate with a hole compressed between two rigid tools, including self-contact) to OpenRadioss/LS-DYNA. Could you briefly share how you go from PrePoMax → LS-PrePost → .k, and which contact setup you use for unknown/self-contact regions?