Note
Go to the end to download the full example code.
Beam1#
Beam subjected to pure tensile loading.
err ux: 3.05e-14 %
==================== Mesh ====================
Element type: SEG2
Ne = 10, Nn = 11
==================== Model ====================
<EasyFEA.Models.Beam._beam.BeamStructure object at 0x7ae54529c750>
solver:scipy
============= Boundary Conditions =============
Unspecified.
=================== Results ===================
Ux max = 4.45e-05
Ux min = 0.00e+00
=================== TicTac ===================
Mesh: 9.567 ms
Boundary Conditions: 19.550 µs
Matrix: 4.004 ms
Solver: 684.977 µs
Display: 28.636 ms
13 import matplotlib.pyplot as plt
14 import numpy as np
15
16 from EasyFEA import Display, Models, Mesher, ElemType, Simulations
17 from EasyFEA.Geoms import Domain, Line
18
19 if __name__ == "__main__":
20 Display.Clear()
21
22 # ----------------------------------------------
23 # Configuration
24 # ----------------------------------------------
25
26 # geom
27 L = 10
28 nL = 10
29 h = 0.1
30 b = 0.1
31
32 # model
33 E = 200000e6
34 ro = 7800
35 v = 0.3
36
37 # load
38 g = 10
39 q = ro * g * (h * b)
40 load = 5000
41
42 # ----------------------------------------------
43 # Mesh
44 # ----------------------------------------------
45
46 elemType = ElemType.SEG2
47 beamDim = 1
48
49 # Create a section for the beam
50 mesher = Mesher()
51 section = mesher.Mesh_2D(Domain((0, 0), (b, h)))
52
53 p1 = (0, 0)
54 p2 = (L, 0)
55 line = Line(p1, p2, L / nL)
56 beam = Models.Beam.Isotropic(beamDim, line, section, E, v)
57
58 mesh = mesher.Mesh_Beams([beam], elemType=elemType)
59
60 # ----------------------------------------------
61 # Simulation
62 # ----------------------------------------------
63
64 # Initialize the beam structure with the defined beam segments
65 beamStructure = Models.Beam.BeamStructure([beam])
66
67 # Create the beam simulation
68 simu = Simulations.Beam(mesh, beamStructure)
69 dof_n = simu.Get_dof_n()
70
71 # Apply boundary conditions
72 simu.add_dirichlet(mesh.Nodes_Point(p1), [0] * dof_n, simu.Get_unknowns())
73 simu.add_lineLoad(mesh.nodes, [q], ["x"])
74 simu.add_neumann(mesh.Nodes_Point(p2), [load], ["x"])
75
76 # Solve the beam problem and get displacement results
77 sol = simu.Solve()
78 simu.Save_Iter()
79
80 # ----------------------------------------------
81 # Results
82 # ----------------------------------------------
83
84 Display.Plot_Mesh(simu, deformFactor=L / 10 / sol.max())
85 Display.Plot_BoundaryConditions(simu)
86 Display.Plot_Result(simu, "ux")
87
88 ux = simu.Result("ux")
89
90 x_array = np.linspace(0, L, 100)
91 u_x = (load * x_array / (E * (section.area))) + (
92 ro * g * x_array / 2 / E * (2 * L - x_array)
93 )
94 err_ux = np.abs(u_x[-1] - ux.max()) / ux.max()
95 Display.MyPrint(f"err ux: {err_ux * 100:.2e} %")
96
97 # Plot the analytical and finite element solutions for displacement (u)
98 ax = Display.Init_Axes()
99 ax.plot(x_array, u_x, label="Analytical", c="blue")
100 ax.scatter(mesh.coord[:, 0], ux, label="FE", c="red", marker="x", zorder=2)
101 ax.set_title("$u_x(x)$")
102 ax.legend()
103
104 print(simu)
105
106 plt.show()
Total running time of the script: (0 minutes 0.193 seconds)



