LinearElasticity2#

A cantilever beam undergoing bending deformation in dynamic.

Note that this simulation is also performed in examples/Dynamic/Dynamic1.py.

LinearElasticity2
LinearElasticity2
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.67 s
Generate movie 02/52 (3.85 %) 8.50 s
Generate movie 03/52 (5.77 %) 8.34 s
Generate movie 04/52 (7.69 %) 8.24 s
Generate movie 05/52 (9.62 %) 8.01 s
Generate movie 06/52 (11.54 %) 7.80 s
Generate movie 07/52 (13.46 %) 7.67 s
Generate movie 08/52 (15.38 %) 7.48 s
Generate movie 09/52 (17.31 %) 7.22 s
Generate movie 10/52 (19.23 %) 7.15 s
Generate movie 11/52 (21.15 %) 7.00 s
Generate movie 12/52 (23.08 %) 6.83 s
Generate movie 13/52 (25.00 %) 6.61 s
Generate movie 14/52 (26.92 %) 6.46 s
Generate movie 15/52 (28.85 %) 6.36 s
Generate movie 16/52 (30.77 %) 6.21 s
Generate movie 17/52 (32.69 %) 6.01 s
Generate movie 18/52 (34.62 %) 5.78 s
Generate movie 19/52 (36.54 %) 5.64 s
Generate movie 20/52 (38.46 %) 5.46 s
Generate movie 21/52 (40.38 %) 5.14 s
Generate movie 22/52 (42.31 %) 5.16 s
Generate movie 23/52 (44.23 %) 4.98 s
Generate movie 24/52 (46.15 %) 4.98 s
Generate movie 25/52 (48.08 %) 4.66 s
Generate movie 26/52 (50.00 %) 4.45 s
Generate movie 27/52 (51.92 %) 4.29 s
Generate movie 28/52 (53.85 %) 4.12 s
Generate movie 29/52 (55.77 %) 3.97 s
Generate movie 30/52 (57.69 %) 3.76 s
Generate movie 31/52 (59.62 %) 3.60 s
Generate movie 32/52 (61.54 %) 3.33 s
Generate movie 33/52 (63.46 %) 3.24 s
Generate movie 34/52 (65.38 %) 3.10 s
Generate movie 35/52 (67.31 %) 2.91 s
Generate movie 36/52 (69.23 %) 2.71 s
Generate movie 37/52 (71.15 %) 2.58 s
Generate movie 38/52 (73.08 %) 2.41 s
Generate movie 39/52 (75.00 %) 2.21 s
Generate movie 40/52 (76.92 %) 2.05 s
Generate movie 41/52 (78.85 %) 1.87 s
Generate movie 42/52 (80.77 %) 1.70 s
Generate movie 43/52 (82.69 %) 1.53 s
Generate movie 44/52 (84.62 %) 1.36 s
Generate movie 45/52 (86.54 %) 1.18 s
Generate movie 46/52 (88.46 %) 1.02 s
Generate movie 47/52 (90.38 %) 852.96 ms
Generate movie 48/52 (92.31 %) 673.95 ms
Generate movie 49/52 (94.23 %) 511.64 ms
Generate movie 50/52 (96.15 %) 340.69 ms
Generate movie 51/52 (98.08 %) 172.16 ms
Generate movie 52/52 (100.00 %) 0.00 µs

 14 import matplotlib.pyplot as plt
 15 import numpy as np
 16
 17 from EasyFEA import Folder, Display, ElemType, Models, Simulations, PyVista
 18 from EasyFEA.FEM import Field, BiLinearForm, FeArray, Sym_Grad, Trace
 19 from EasyFEA.Geoms import Domain
 20
 21 if __name__ == "__main__":
 22     Display.Clear()
 23
 24     # ----------------------------------------------
 25     # Configuration
 26     # ----------------------------------------------
 27
 28     dim = 3
 29
 30     # outputs
 31     makeMovie = True
 32     folder = Folder.Results_Dir()
 33
 34     # geom
 35     L = 120  # mm
 36     h = 13
 37
 38     # model
 39     elastic = Models.Elastic.Isotropic(dim, 210000, 0.3, planeStress=True, thickness=h)
 40     lmbda = elastic.get_lambda()
 41     mu = elastic.get_mu()
 42     rho = 8100 * 1e-9
 43
 44     # load
 45     Tmax = 0.5
 46     N = 50
 47     dt = Tmax / N
 48     time = -dt
 49
 50     # ----------------------------------------------
 51     # Mesh
 52     # ----------------------------------------------
 53
 54     contour = Domain((0, 0), (L, h), h / 3)
 55
 56     if dim == 2:
 57         mesh = contour.Mesh_2D([], ElemType.QUAD4, isOrganised=True)
 58     else:
 59         mesh = contour.Mesh_Extrude(
 60             [], [0, 0, h], [3], ElemType.HEXA8, isOrganised=True
 61         )
 62
 63     nodesX0 = mesh.Nodes_Conditions(lambda x, y, z: x == 0)
 64     nodesXL = mesh.Nodes_Conditions(lambda x, y, z: x == L)
 65
 66     # ----------------------------------------------
 67     # Formulations
 68     # ----------------------------------------------
 69
 70     field = Field(mesh.groupElem, dim)
 71
 72     def S(u: Field) -> FeArray:
 73         Eps = Sym_Grad(u)
 74         return 2 * mu * Eps + lmbda * Trace(Eps) * np.eye(dim)
 75
 76     @BiLinearForm
 77     def computeK(u: Field, v: Field):
 78         Sig = S(u)
 79         Eps = Sym_Grad(v)
 80         return Sig.ddot(Eps)
 81
 82     @BiLinearForm
 83     def computeM(u: Field, v: Field):
 84         return rho * u.dot(v)
 85
 86     @BiLinearForm
 87     def computeC(u: Field, v: Field):
 88         K = computeK(u, v)
 89         M = computeM(u, v)
 90         C = K * 1e-3 + M * 1e-3
 91         return C
 92
 93     weakForms = Models.WeakForms(field, computeK, computeC, computeM)
 94
 95     # ----------------------------------------------
 96     # Simulations
 97     # ----------------------------------------------
 98
 99     simu = Simulations.WeakForms(mesh, weakForms)
100
101     # static simulation
102     simu.add_dirichlet(nodesX0, [0] * dim, simu.Get_unknowns())
103     simu.add_dirichlet(nodesXL, [-10], ["y"])
104
105     simu.Solve()
106
107     # dynamic simulation
108     simu.Solver_Set_Hyperbolic_Algorithm(dt)
109     simu.Save_Iter()
110
111     simu.Bc_Init()
112     simu.add_dirichlet(nodesX0, [0] * dim, simu.Get_unknowns())
113
114     while time <= Tmax:
115
116         time += dt
117
118         simu.Solve()
119         simu.Save_Iter()
120
121         print(f"{time:.3f} s", end="\r")
122
123     # ----------------------------------------------
124     # Results
125     # ----------------------------------------------
126
127     if makeMovie:
128         PyVista.Movie_simu(
129             simu,
130             "uy",
131             folder,
132             "uy.gif",
133             deformFactor=1,
134             plotMesh=True,
135             N=400,
136             nodeValues=True,
137         )
138
139     simu.Set_Iter(0)
140     PyVista.Plot(simu, "uy", 1, plotMesh=True).show()
141
142     plt.show()

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

Gallery generated by Sphinx-Gallery