Hi all,
-
Are there any quick workarounds to model situations where contact occurs between a slave rigid body (say, a rigid ring) and a master deformable/rigid body, but using the user’s own solver instead of GetFEM predefined methods, based on Lagrange multipliers?
Generally speaking, is there any way in GetFEM to specify that a domain under consideration is rigid, without having to specify the form of the displacement field?
I believe that taking very large values of the elastic constants for the slave body (assumed to be rigid) is not a good strategy, in terms of numerical stability.
-
How to prescribe point loads instead of volume/surface density of loads? I would like to simulate a rigid sphere indenting a deformable half-plane, where the rigid sphere is the slave, which is pushed by a point load, say P, applied on its North pole, against a rectangular domain representing the half-space.
Thanks for your feedback.
Hi,
- If the rigid part geometry is simple, it is best to use its analytical (implicit) description. For example in a metal sheet rolling model I use this definition of frictional contact
md.add_raytracing_transformation("contact_trans", release_dist)
md.add_slave_contact_boundary_to_raytracing_transformation("contact_trans", mesh, "u", T_RG)
md.add_rigid_obstacle_to_raytracing_transformation("contact_trans", f"sqrt(sqr(x)+sqr(y-{R+0.5*h}))-{R}", N)
md.add_nonlinear_term(mim_contact, "-contact_mult.Test_u", T_RG)
md.add_nonlinear_term(mim_contact, "-(1/r)*contact_mult.Test_contact_mult", T_RG)
md.add_macro("n", "Transformed_unit_vector(Grad_u,Normal)")
md.add_macro("Vs", "(u-u0-[[1-c,s],[-s,1-c]]"\
f"*(Interpolate(X,contact_trans)-[0;{R+0.5*h}]))*alpha")
md.add_macro("g", "(Interpolate(X,contact_trans)-X-u).n")
md.add_macro("C", "(1/r)*Coulomb_friction_coupled_projection(contact_mult,n,Vs,g,f,r)")
md.add_nonlinear_term(mim_contact,
"Interpolate_filter(contact_trans, C.Test_contact_mult, 2)", T_RG)
where the expression f"sqrt(sqr(x)+sqr(y-{R+0.5*h}))-{R}" defines the roller.
-
For more complex geometries, create a mesh for the rigid body, add a displacement field u1 for your deformable body and a displacement field u2 for the rigid body. Define a deformable-deformable contact between the two, disable the u2 variable in the model with md.disable_variable("u2").
-
For point loads you can do it with the model.add_explicit_rhs(...) function, but I strongly encourage you to avoid point loads. They are never a good idea.
2 Likes