Elas5#

A cylindrical conduit exposed to uniform pressure.

  • TRI6: Ne = 438, Nn = 942
  • Boundary conditions
  • $ux$
  • $uy$
  • $\sigma_{vm}$
==================== Mesh ====================

Element type: TRI6
Ne = 438, Nn = 942

==================== Model ====================

Isotropic:
E = 2.10e+05, v = 0.3
planeStress = False
thickness = 1.00e+02

solver:scipy

============= Boundary Conditions =============

Unspecified.

=================== Results ===================


W def = 0.03

Svm max = 2.59

Evm max = 0.00 %

Ux max = 6.69e-05
Ux min = 0.00e+00

Uy max = 6.68e-05
Uy min = 0.00e+00

=================== TicTac ===================

Mesh: 20.349 ms
Boundary Conditions: 39.577 µs
Matrix: 10.441 ms
Solver: 8.319 ms
Display: 104.946 ms
PostProcessing: 951.529 µs

 13 import matplotlib.pyplot as plt
 14 import numpy as np
 15
 16 from EasyFEA import Display, Models, ElemType, Simulations
 17 from EasyFEA.Geoms import Point, Line, Circle, CircleArc, Contour
 18
 19 if __name__ == "__main__":
 20     Display.Clear()
 21
 22     # ----------------------------------------------
 23     # Configuration
 24     # ----------------------------------------------
 25
 26     dim = 2
 27     isSymmetric = True
 28     openCrack = True
 29
 30     # geom
 31     r = 10
 32     e = 5
 33     thickness = 100
 34
 35     # load
 36     sig = 5  # bar
 37     sig *= 1e-1  # 1 bar = 0.1 MPa
 38
 39     # ----------------------------------------------
 40     # Mesh
 41     # ----------------------------------------------
 42     meshSize = e / 5
 43
 44     center = Point()
 45     if isSymmetric:
 46         p1 = Point(r, 0)
 47         p2 = Point(e + r, 0)
 48         p3 = Point(0, e + r)
 49         p4 = Point(0, r)
 50
 51         line1 = Line(p1, p2, meshSize)
 52         line2 = CircleArc(p2, p3, center, meshSize=meshSize)
 53         line3 = Line(p3, p4, meshSize)
 54         line4 = CircleArc(p4, p1, center, meshSize=meshSize)
 55
 56         contour = Contour([line1, line2, line3, line4])
 57         inclusions = []
 58     else:
 59         contour = Circle(center, (r + e) * 2, meshSize)
 60         inclusions = [Circle(center, 2 * r, meshSize)]
 61
 62     extrude = [0, 0, -thickness]
 63
 64     l = e / 4
 65     p = r + e / 2
 66     alpha = np.pi / 3
 67     pc1 = Point((p - l / 2) * np.cos(alpha), (p - l / 2) * np.sin(alpha))
 68     pc2 = Point((p + l / 2) * np.cos(alpha), (p + l / 2) * np.sin(alpha))
 69
 70     if dim == 2:
 71         crack = Line(pc1, pc2, meshSize / 6, isOpen=openCrack)
 72         mesh = contour.Mesh_2D(inclusions, elemType=ElemType.TRI6, cracks=[crack])
 73     else:
 74         pc3 = pc2.copy()
 75         pc3.Translate(*extrude)
 76         pc4 = pc1.copy()
 77         pc4.Translate(*extrude)
 78         l1 = Line(pc1, pc2, meshSize / 6, isOpen=openCrack)
 79         l2 = Line(pc2, pc3, meshSize / 6)
 80         l3 = Line(pc3, pc4, meshSize / 6, isOpen=openCrack)
 81         l4 = Line(pc4, pc1, meshSize / 6)
 82         crack = Contour([l1, l2, l3, l4], isOpen=openCrack)
 83         mesh = contour.Mesh_Extrude(
 84             inclusions, extrude, [], ElemType.TETRA4, cracks=[crack]
 85         )
 86
 87     # ----------------------------------------------
 88     # Simulation
 89     # ----------------------------------------------
 90     material = Models.Elastic.Isotropic(
 91         dim, E=210000, v=0.3, planeStress=False, thickness=thickness
 92     )
 93     simu = Simulations.Elastic(mesh, material)
 94
 95     if isSymmetric:
 96         nodes_x0 = mesh.Nodes_Conditions(lambda x, y, z: x == 0)
 97         nodes_y0 = mesh.Nodes_Conditions(lambda x, y, z: y == 0)
 98         simu.add_dirichlet(nodes_x0, [0], ["x"])
 99         simu.add_dirichlet(nodes_y0, [0], ["y"])
100
101     nodes_load = mesh.Nodes_Cylinder(Circle(center, r * 2), direction=extrude)
102
103     if dim == 2 and not isSymmetric:
104         sig *= -1
105
106     simu.add_pressureLoad(nodes_load, sig)
107
108     simu.Solve()
109     simu.Save_Iter()
110
111     # ----------------------------------------------
112     # Results
113     # ----------------------------------------------
114     factorDef = r / 5 / simu.Result("displacement_norm").max()
115
116     Display.Plot_Mesh(simu, deformFactor=factorDef)
117     Display.Plot_BoundaryConditions(simu)
118     Display.Plot_Result(simu, "ux", ncolors=10, nodeValues=True)
119     Display.Plot_Result(simu, "uy", ncolors=10, nodeValues=True)
120     Display.Plot_Result(
121         simu, "Svm", ncolors=10, nodeValues=True, deformFactor=factorDef, plotMesh=True
122     )
123
124     print(simu)
125
126     # PyVista.Plot_BoundaryConditions(simu).show()
127
128     plt.show()

Total running time of the script: (0 minutes 0.501 seconds)

Gallery generated by Sphinx-Gallery