I solve the contact problem of the theory of elasticity, the condition in figure 1. Yellow cylinder and a red cube. the Blue highlighted area of contact between cylinder and cube. Сontact type - ‘Bonded’. Figure 2 shows a 3d model in the format *step. The cylinder and cube have different material.
If I import *.step which contains these two models, then there is a problem with the purpose of the material. NGSolve sees two models, but you can only specify one material. So I went the other way, importing the models separately:
geo_1 = LoadOCCGeometry('cyl.step') grid_mesh_1 = geo_1.GenerateMesh(maxh=0.5) mesh_1 = Mesh(grid_mesh_1) geo_2 = LoadOCCGeometry('cub.step') grid_mesh_2 = geo_2.GenerateMesh(maxh=0.5) mesh_2 = Mesh(grid_mesh_2)
Then I set the names for the boundary conditions:
for key in range(len(mesh_1.GetBoundaries())): grid_mesh_1.SetBCName(key, 'cyl_surface_' + str(key)) for key in range(len(mesh_2.GetBoundaries())): grid_mesh_2.SetBCName(key, 'cub_surface_' + str(key))
grid_mesh_1.SetMaterial(1, 'material_1') grid_mesh_2.SetMaterial(1, 'material_2')
Create a space of finite elements:
cyl = H1(mesh_1, order=1, dim=mesh_1.dim, definedon='material_1') cub = H1(mesh_2, order=1, dirichlet='cub_surface_6', dim=mesh_2.dim, definedon='material_2')
And then the question arises, how now to ask the contact between the cylinder and the cube?
How to combine H1 spaces for further calculation?
cyl_and_cub = FESpace([cyl, cub])
nothing happens. I think it’s because there is no contact condition and the finite elements intersect.