I solve the following problem:
The cantilever beam is fixed with one end firmly fixed at the other end and loaded with a concentrated force [color=red]F = 1e5 N[/color]. The beam section is a square, and [color=red]a = b = 1[/color]. The beam length is [color=red]l = 10[/color]. The elastic modulus is[color=red] E = 2.1e11[/color], the Poisson’s ratio is [color=red]nu = 0.2[/color].
The solution in Ansys is very different from the solution of the solution in NGSolve.
Think it is because I incorrectly set load in NGSolve. Can you explain how to set the load on a certain face? What could be the reason for this difference in the result?
Files: geometry, mesh, PDE and python file.
You have to give the surface a seperate boundary number
solid p2 = plane (10,1,1;1,0,0) -bc=3;
and then set the coefficientfunction only for bc 3 and 0 elsewhere:
# A surface force in z-direction for each piece of the boundary
define coefficient coef_surface_force_z
0, 0, 1e5,
The BVP from Python doesn’t work for vector valued vector entries and matrix valued matrix entries yet, so I replaced the following line in your Python file to get it running:
# BVP(bf=a, gf=u, lf=f, pre=c, maxsteps=1000).Do()
u.vec.data = a.mat.Inverse(fes.FreeDofs()) * f.vec
you could also write everything in python.
Using linear strain and stress tensors, you get the bilinear form
a = BilinearForm(fes)
a += SymbolicBFI( 2*mu*InnerProduct(epsilon(u),epsilon(v)) + lam*Trace(u.Deriv())*Trace(v.Deriv()))
and for the force you can use
force = CoefficientFunction( (0,1e5,0) )
f = LinearForm(fes)
f += SymbolicLFI( force*v, definedon=mesh.Boundaries("force"))
The “definedon” restricts to the surface you wanted.