I performed the following code:
domain = Rectangle(Point(0, 0), Point(3, 3))
mesh = generate_mesh(domain, number_of_element)
Vu = VectorFunctionSpace(mesh, "CG", 1)
u = Function(Vu, name="Displacement")
# Solve displacement u-problem
problem_u.solve(u.vector())
###define functionspace
V=FunctionSpace(mesh,'P',1)
W=TensorFunctionSpace(mesh,"DG",0)
###get displacement###
u_magnitude = sqrt(dot(u,u))
u_magnitude = project(u_magnitude,V)
u_x, u_y = u.split(deepcopy=True)
u_x=project(u_x,V)
###get stress component
epsilo=0.5*(nabla_grad(u)+nabla_grad(u).T) #strain
sigma=E*nu/((1+nu)*(1-2*nu))*tr(epsilo)*Identity(2)+2*(E/(2*(1+nu)))*epsilo
sigma=project(sigma,W)
s11,s12,s21,s22=sigma.split(deepcopy=True)
###get von-mises
s = sigma_ - (1. / 3) * tr(sigma_) * Identity(2)
von_Mises = sqrt(3. / 2 * inner(s, s))
von_Mises = project(von_Mises, V)
the von-mises
obtained by FEniCS have 1.3% error Abaqus, but strange, the displacement u_magnitude
and stress component s11
both have large error (about 30%) compared with Abaqus. Why this could happen? (I guess the problem could be split
command? )
this is a plane strain problem and choose linear triangle element in Abaqus.
the similar number of element is applied in Abaqus and FEniCS
Thanks in advance