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 0/51
Generate movie 1/51 (1.96 %) 5.75 s
Generate movie 2/51 (3.92 %) 5.61 s
Generate movie 3/51 (5.88 %) 5.47 s
Generate movie 4/51 (7.84 %) 5.36 s
Generate movie 5/51 (9.80 %) 5.25 s
Generate movie 6/51 (11.76 %) 5.14 s
Generate movie 7/51 (13.73 %) 5.03 s
Generate movie 8/51 (15.69 %) 4.91 s
Generate movie 9/51 (17.65 %) 4.79 s
Generate movie 10/51 (19.61 %) 4.69 s
Generate movie 11/51 (21.57 %) 4.58 s
Generate movie 12/51 (23.53 %) 4.42 s
Generate movie 13/51 (25.49 %) 4.35 s
Generate movie 14/51 (27.45 %) 4.21 s
Generate movie 15/51 (29.41 %) 4.10 s
Generate movie 16/51 (31.37 %) 4.07 s
Generate movie 17/51 (33.33 %) 3.77 s
Generate movie 18/51 (35.29 %) 3.74 s
Generate movie 19/51 (37.25 %) 3.66 s
Generate movie 20/51 (39.22 %) 3.65 s
Generate movie 21/51 (41.18 %) 3.42 s
Generate movie 22/51 (43.14 %) 3.32 s
Generate movie 23/51 (45.10 %) 3.19 s
Generate movie 24/51 (47.06 %) 3.08 s
Generate movie 25/51 (49.02 %) 2.95 s
Generate movie 26/51 (50.98 %) 2.94 s
Generate movie 27/51 (52.94 %) 2.74 s
Generate movie 28/51 (54.90 %) 2.61 s
Generate movie 29/51 (56.86 %) 2.50 s
Generate movie 30/51 (58.82 %) 2.40 s
Generate movie 31/51 (60.78 %) 2.26 s
Generate movie 32/51 (62.75 %) 2.15 s
Generate movie 33/51 (64.71 %) 2.05 s
Generate movie 34/51 (66.67 %) 1.86 s
Generate movie 35/51 (68.63 %) 1.83 s
Generate movie 36/51 (70.59 %) 1.72 s
Generate movie 37/51 (72.55 %) 1.61 s
Generate movie 38/51 (74.51 %) 1.50 s
Generate movie 39/51 (76.47 %) 1.38 s
Generate movie 40/51 (78.43 %) 1.27 s
Generate movie 41/51 (80.39 %) 1.24 s
Generate movie 42/51 (82.35 %) 1.04 s
Generate movie 43/51 (84.31 %) 920.36 ms
Generate movie 44/51 (86.27 %) 808.46 ms
Generate movie 45/51 (88.24 %) 685.55 ms
Generate movie 46/51 (90.20 %) 573.61 ms
Generate movie 47/51 (92.16 %) 457.54 ms
Generate movie 48/51 (94.12 %) 343.25 ms
Generate movie 49/51 (96.08 %) 230.36 ms
Generate movie 50/51 (98.04 %) 114.43 ms
Generate movie 51/51 (100.00 %) 0.00 µs
==================== Mesh ====================
Element type: QUAD4
Ne = 230, Nn = 282
==================== Model ====================
ElasIsot:
E = 2.10e+05, v = 0.3
planeStress = True
thickness = 1.30e+01
solver : pypardiso
============= Boundary Conditions =============
Unspecified.
=================== Results ===================
W def = 1.15
Svm max = 12.72
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 : 1.113 s
Boundary Conditions : 912.905 µs
Matrix : 4.660 s
Solver : 8.731 s
Display : 660.886 ms
PostProcessing : 479.632 ms
Resolution hyperelastic : 6.641 s
PyVista_Interface : 28.256 s
Paraview : 821.351 ms
12 from EasyFEA import (
13 Display,
14 Folder,
15 Models,
16 plt,
17 ElemType,
18 Simulations,
19 PyVista,
20 Paraview,
21 )
22 from EasyFEA.Geoms import Domain
23
24 if __name__ == "__main__":
25 Display.Clear()
26
27 # ----------------------------------------------
28 # Configuration
29 # ----------------------------------------------
30 dim = 2
31
32 # outputs
33 folder = Folder.Join(Folder.RESULTS_DIR, "LinearizedElasticity", "Dynamic1")
34 makeParaview = False
35 makeMovie = True
36 result = "uy"
37
38 # geom
39 L = 120 # mm
40 h = 13
41 b = 13
42
43 # time
44 Tmax = 0.5
45 N = 50
46 dt = Tmax / N
47 time = -dt
48
49 # Dumping
50 coefM = 1e-3
51 coefK = 1e-3
52
53 # ----------------------------------------------
54 # Mesh
55 # ----------------------------------------------
56 meshSize = h / 5
57
58 if dim == 2:
59 domain = Domain((0, -h / 2), (L, h / 2), meshSize)
60 mesh = domain.Mesh_2D([], ElemType.QUAD4, isOrganised=True)
61
62 area = mesh.area - L * h
63
64 elif dim == 3:
65 domain = Domain((0, -h / 2, -b / 2), (L, h / 2, -b / 2), meshSize=meshSize)
66 mesh = domain.Mesh_Extrude([], [0, 0, b], [3], ElemType.HEXA8, isOrganised=True)
67
68 volume = mesh.volume - L * b * h
69 area = mesh.area - (L * h * 4 + 2 * b * h)
70
71 nodes_0 = mesh.Nodes_Conditions(lambda x, y, z: x == 0)
72 nodes_L = mesh.Nodes_Conditions(lambda x, y, z: x == L)
73 nodes_h = mesh.Nodes_Conditions(lambda x, y, z: y == h / 2)
74
75 # ----------------------------------------------
76 # Simulation
77 # ----------------------------------------------
78
79 material = Models.ElasIsot(dim, thickness=b)
80 simu = Simulations.ElasticSimu(mesh, material)
81 simu.rho = 8100 * 1e-9
82
83 # static simulation
84 simu.Bc_Init()
85 simu.add_dirichlet(nodes_0, [0] * dim, simu.Get_unknowns(), description="Fixed")
86 simu.add_dirichlet(nodes_L, [-10], ["y"], description="dep")
87 simu.Solve()
88 simu.Save_Iter()
89 Display.Plot_Mesh(simu, deformFactor=1)
90
91 # dynamic simulation
92 simu.Solver_Set_Hyperbolic_Algorithm(dt)
93 simu.Set_Rayleigh_Damping_Coefs(coefM=coefM, coefK=coefK)
94
95 simu.Bc_Init()
96 simu.add_dirichlet(nodes_0, [0] * dim, simu.Get_unknowns(), description="Fixed")
97
98 while time <= Tmax:
99 time += dt
100
101 simu.Solve()
102 simu.Save_Iter()
103
104 print(f"{time:.3f} s", end="\r")
105
106 # ----------------------------------------------
107 # Results
108 # ----------------------------------------------
109
110 Display.Plot_BoundaryConditions(simu)
111
112 if makeParaview:
113 Paraview.Save_simu(simu, folder)
114
115 if makeMovie:
116 PyVista.Movie_simu(
117 simu,
118 f"{result}",
119 folder,
120 f"{result}.gif",
121 deformFactor=1,
122 plotMesh=True,
123 )
124
125 print(simu)
126 Display.Plot_Result(simu, f"{result}", deformFactor=1, nodeValues=False)
127 Display.Plot_Result(simu, "Svm", plotMesh=False, nodeValues=False)
128
129 plt.show()
Total running time of the script: (0 minutes 10.350 seconds)



