Note
Go to the end to download the full example code.
Elas8#
A cantilever beam undergoing dynamic bending deformation.

0.000 s
0.010 s
0.020 s
0.030 s
0.040 s
0.050 s
0.060 s
0.070 s
0.080 s
0.090 s
0.100 s
0.110 s
0.120 s
0.130 s
0.140 s
0.150 s
0.160 s
0.170 s
0.180 s
0.190 s
0.200 s
0.210 s
0.220 s
0.230 s
0.240 s
0.250 s
0.260 s
0.270 s
0.280 s
0.290 s
0.300 s
0.310 s
0.320 s
0.330 s
0.340 s
0.350 s
0.360 s
0.370 s
0.380 s
0.390 s
0.400 s
0.410 s
0.420 s
0.430 s
0.440 s
0.450 s
0.460 s
0.470 s
0.480 s
0.490 s
0.500 s
Generate movie 01/52 (1.92 %) 10.17 s
Generate movie 02/52 (3.85 %) 7.90 s
Generate movie 03/52 (5.77 %) 7.70 s
Generate movie 04/52 (7.69 %) 7.54 s
Generate movie 05/52 (9.62 %) 7.35 s
Generate movie 06/52 (11.54 %) 7.16 s
Generate movie 07/52 (13.46 %) 7.05 s
Generate movie 08/52 (15.38 %) 6.90 s
Generate movie 09/52 (17.31 %) 6.69 s
Generate movie 10/52 (19.23 %) 6.61 s
Generate movie 11/52 (21.15 %) 6.41 s
Generate movie 12/52 (23.08 %) 6.26 s
Generate movie 13/52 (25.00 %) 5.93 s
Generate movie 14/52 (26.92 %) 6.05 s
Generate movie 15/52 (28.85 %) 5.84 s
Generate movie 16/52 (30.77 %) 5.71 s
Generate movie 17/52 (32.69 %) 5.54 s
Generate movie 18/52 (34.62 %) 5.39 s
Generate movie 19/52 (36.54 %) 5.24 s
Generate movie 20/52 (38.46 %) 5.10 s
Generate movie 21/52 (40.38 %) 4.93 s
Generate movie 22/52 (42.31 %) 4.75 s
Generate movie 23/52 (44.23 %) 4.63 s
Generate movie 24/52 (46.15 %) 4.45 s
Generate movie 25/52 (48.08 %) 4.33 s
Generate movie 26/52 (50.00 %) 4.13 s
Generate movie 27/52 (51.92 %) 3.97 s
Generate movie 28/52 (53.85 %) 3.81 s
Generate movie 29/52 (55.77 %) 3.64 s
Generate movie 30/52 (57.69 %) 3.48 s
Generate movie 31/52 (59.62 %) 3.31 s
Generate movie 32/52 (61.54 %) 3.18 s
Generate movie 33/52 (63.46 %) 2.99 s
Generate movie 34/52 (65.38 %) 2.83 s
Generate movie 35/52 (67.31 %) 2.73 s
Generate movie 36/52 (69.23 %) 2.55 s
Generate movie 37/52 (71.15 %) 2.38 s
Generate movie 38/52 (73.08 %) 2.23 s
Generate movie 39/52 (75.00 %) 2.07 s
Generate movie 40/52 (76.92 %) 1.91 s
Generate movie 41/52 (78.85 %) 1.75 s
Generate movie 42/52 (80.77 %) 1.60 s
Generate movie 43/52 (82.69 %) 1.43 s
Generate movie 44/52 (84.62 %) 1.28 s
Generate movie 45/52 (86.54 %) 1.13 s
Generate movie 46/52 (88.46 %) 963.43 ms
Generate movie 47/52 (90.38 %) 802.66 ms
Generate movie 48/52 (92.31 %) 641.17 ms
Generate movie 49/52 (94.23 %) 478.02 ms
Generate movie 50/52 (96.15 %) 319.54 ms
Generate movie 51/52 (98.08 %) 157.74 ms
Generate movie 52/52 (100.00 %) 0.00 µs
==================== Mesh ====================
Element type: QUAD4
Ne = 230, Nn = 282
==================== Model ====================
Isotropic:
E = 2.10e+05, v = 0.3
planeStress = True
thickness = 1.30e+01
solver : scipy
============= Boundary Conditions =============
Unspecified.
=================== Results ===================
W def = 1.15
Svm max = 12.78
Evm max = 0.01 %
Ux max = 3.73e-03
Ux min = -3.73e-03
Uy max = 0.00e+00
Uy min = -5.04e-02
=================== TicTac ===================
Mesh : 9.973 ms
Boundary Conditions : 25.749 µs
Matrix : 9.570 ms
Solver : 247.986 ms
Display : 35.676 ms
PyVista_Interface : 13.381 s
PostProcessing : 924.826 µs
12 import matplotlib.pyplot as plt
13
14 from EasyFEA import Display, Folder, Models, ElemType, Simulations, PyVista, Paraview
15 from EasyFEA.Geoms import Domain
16
17 if __name__ == "__main__":
18 Display.Clear()
19
20 # ----------------------------------------------
21 # Configuration
22 # ----------------------------------------------
23 dim = 2
24
25 # outputs
26 folder = Folder.Results_Dir()
27 makeParaview = False
28 makeMovie = True
29 result = "uy"
30
31 # geom
32 L = 120 # mm
33 h = 13
34 b = 13
35
36 # time
37 Tmax = 0.5
38 N = 50
39 dt = Tmax / N
40 time = -dt
41
42 # Dumping
43 coefM = 1e-3
44 coefK = 1e-3
45
46 # ----------------------------------------------
47 # Mesh
48 # ----------------------------------------------
49 meshSize = h / 5
50
51 if dim == 2:
52 domain = Domain((0, -h / 2), (L, h / 2), meshSize)
53 mesh = domain.Mesh_2D([], ElemType.QUAD4, isOrganised=True)
54
55 area = mesh.area - L * h
56
57 elif dim == 3:
58 domain = Domain((0, -h / 2, -b / 2), (L, h / 2, -b / 2), meshSize=meshSize)
59 mesh = domain.Mesh_Extrude([], [0, 0, b], [3], ElemType.HEXA8, isOrganised=True)
60
61 volume = mesh.volume - L * b * h
62 area = mesh.area - (L * h * 4 + 2 * b * h)
63
64 nodes_0 = mesh.Nodes_Conditions(lambda x, y, z: x == 0)
65 nodes_L = mesh.Nodes_Conditions(lambda x, y, z: x == L)
66 nodes_h = mesh.Nodes_Conditions(lambda x, y, z: y == h / 2)
67
68 # ----------------------------------------------
69 # Simulation
70 # ----------------------------------------------
71
72 material = Models.Elastic.Isotropic(dim, thickness=b)
73 simu = Simulations.Elastic(mesh, material)
74 simu.rho = 8100 * 1e-9
75
76 # static simulation
77 simu.Bc_Init()
78 simu.add_dirichlet(nodes_0, [0] * dim, simu.Get_unknowns(), description="Fixed")
79 simu.add_dirichlet(nodes_L, [-10], ["y"], description="dep")
80 simu.Solve()
81 simu.Save_Iter()
82 Display.Plot_Mesh(simu, deformFactor=1)
83
84 # dynamic simulation
85 simu.Solver_Set_Hyperbolic_Algorithm(dt)
86 simu.Set_Rayleigh_Damping_Coefs(coefM=coefM, coefK=coefK)
87
88 simu.Bc_Init()
89 simu.add_dirichlet(nodes_0, [0] * dim, simu.Get_unknowns(), description="Fixed")
90
91 while time <= Tmax:
92 time += dt
93
94 simu.Solve()
95 simu.Save_Iter()
96
97 print(f"{time:.3f} s", end="\r")
98
99 # ----------------------------------------------
100 # Results
101 # ----------------------------------------------
102
103 Display.Plot_BoundaryConditions(simu)
104
105 if makeParaview:
106 Paraview.Save_simu(simu, folder)
107
108 if makeMovie:
109 PyVista.Movie_simu(
110 simu,
111 f"{result}",
112 folder,
113 f"{result}.gif",
114 deformFactor=1,
115 plotMesh=True,
116 )
117
118 print(simu)
119 Display.Plot_Result(simu, f"{result}", deformFactor=1, nodeValues=False)
120 Display.Plot_Result(simu, "Svm", plotMesh=False, nodeValues=False)
121
122 plt.show()
Total running time of the script: (0 minutes 14.010 seconds)



