Dear all,
I am currently working on a self-contact problem in large deformation elasticity using the augmented Lagrangian method in GetFEM++.
I’ve designed my code in a modular way so that it can be extended later not only to handle self-contact but also contact between multiple bodies .
While the approach works in some cases, it fails in others — for instance, the contact is not properly detected, or the solver becomes unstable or fails to converge.
I’ve experimented with several parameters, including:
- the augmented Lagrangian parameter ,
- the realised distance threshold ,
- and other factors such as mesh refinement and initial configurations .
Despite this, I still can’t identify the root cause of the failures.
Below is an excerpt of the code responsible for the contact implementation.
I would greatly appreciate it if you could take a look and let me know if anything seems incorrect or poorly defined.
Thank you in advance for your help and time.
Best regards,
md1.add_raytracing_transformation("raytrace", release_dist)
md1.define_variable_group("u_r", "u") # can be extend for u1, u2, u3 etc ...
md1.add_master_contact_boundary_to_raytracing_transformation("raytrace", m, "u_r", 911)
md1.add_nonlinear_term(mim_contact2, "-contact_mult2.Test_u", 911)
md1.add_nonlinear_term(mim_contact2, "-(1/c)*contact_mult2.Test_contact_mult2", 911)
md1.add_macro("normal2", "Normalized(Inv(F1').Normal)")
md1.add_macro("gap2", "(Interpolate(X,raytrace)+Interpolate(u_r,raytrace)-X-u).normal2")
md1.add_nonlinear_term(mim_contact2,
"Interpolate_filter(raytrace,(-1/c)*neg_part(contact_mult2.normal2+c*gap2)*normal2.Test_contact_mult2, 1)", 911)
md1.add_nonlinear_term(mim_contact2,
"Interpolate_filter(raytrace, -neg_part(contact_mult2.normal2+c*gap2)*normal2.Interpolate(Test_u,raytrace), 1)",
911)