Advertisement
Guest User

Untitled

a guest
Oct 8th, 2015
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. from dolfin import *
  2.  
  3. # Mesh Params ################
  4. E, nu = 1.0, 0.4 #material params
  5. mesh = UnitSquareMesh(100, 100)
  6.  
  7. print 'Creating QUADRATIC Lagrangian function space...'
  8. Vv = VectorFunctionSpace(mesh, "Lagrange", 2)
  9. Vf = FunctionSpace(mesh, "Lagrange", 2)
  10. Vt = TensorFunctionSpace(mesh, "Lagrange", 2)
  11.  
  12. # P is stress vector of stress values normal and tangent to boundary
  13. P = Expression(('(x[0]-xc)','(x[0]-xc)'),xc=0.5)
  14.  
  15. class LeftBoundary(SubDomain):
  16. def inside(self, x, on_boundary):
  17. tol = 1E-7
  18. return on_boundary and abs(x[0]) < tol
  19.  
  20. class RightBoundary(SubDomain):
  21. def inside(self, x, on_boundary):
  22. tol = 1E-7
  23. return on_boundary and abs(x[0] - 1) < tol
  24.  
  25. left_boundary = LeftBoundary()
  26. right_boundary = RightBoundary()
  27.  
  28. boundary_parts = MeshFunction("size_t", mesh, mesh.topology().dim() - 1)
  29. boundary_parts.set_all(0)
  30. right_boundary.mark(boundary_parts, 1)
  31. left_boundary.mark(boundary_parts, 2)
  32. ds = Measure("ds")[boundary_parts]
  33.  
  34. ##############################
  35. # Define variational problem #
  36. ##############################
  37. print 'Defining test and trial functions...'
  38. v = TestFunction(Vf)
  39. tau = TestFunction(Vv)
  40. phi = TrialFunction(Vf)
  41. u = TrialFunction(Vv)
  42.  
  43. # functions for variational problem
  44. d = u.geometric_dimension()
  45. epsilon = sym(nabla_grad(u))
  46. # PLANE STRESS
  47. sigma = E/(1+nu)* (epsilon) + E*nu/((1-nu**2)) * tr(epsilon)*Identity(d)
  48.  
  49. # Define normal and tangent directions on mesh
  50. norm = FacetNormal(mesh)
  51. tang = as_vector([norm[1], -norm[0]])
  52.  
  53. tau_n = dot(tau,norm)
  54. tau_t = dot(tau,tang)
  55. P_n = dot(P,norm)
  56. P_t = dot(P,tang)
  57.  
  58. #################
  59. # SOLVE
  60. #################
  61. au = inner(sigma, sym(nabla_grad(tau)))*dx
  62. Lu = dot(P_n,tau_n)*ds(1) + dot(P_n,tau_n)*ds(2) + dot(P_t,tau_t)*ds(1) + dot(P_t,tau_t)*ds(2)
  63. u = Function(Vv)
  64. solve(au == Lu, u)
  65.  
  66. ## View the results
  67. sigma = E/(1+nu)* (sym(nabla_grad(u))) + E*nu/((1-nu**2)) * tr(sym(nabla_grad(u)))*Identity(d)
  68. s_V = project( sigma, Vt)
  69. sxx = project(s_V[0,0], Vf);
  70. sxy = project(s_V[0,1], Vf);
  71. syx = project(s_V[1,0], Vf);
  72. syy = project(s_V[1,1], Vf);
  73. plot(sxx, interactive=True, rescale=False,scalarbar=True)
  74. plot(syy, interactive=True, rescale=False,scalarbar=True)
  75. plot(sxy, interactive=True, rescale=False,scalarbar=True)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement