Note
Go to the end to download the full example code.
Thermal1#
Transient thermal simulation.


Volume: 0.913
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
==================== Mesh ====================
Element type: PRISM18
Ne = 288, Nn = 1512, dof = 4536
==================== Model ====================
Thermal :
thermal conductivity (k) : 1
thermal mass capacity (c) : 1
solver : pypardiso
============= Boundary Conditions =============
Unspecified.
=================== Results ===================
Unspecified.
=================== TicTac ===================
Mesh : 37.917 ms
Boundary Conditions : 9.537 µs
Matrix : 16.316 ms
Solver : 822.053 ms
Generate movie 0/50
Generate movie 1/50 (2.00 %) 7.59 s
Generate movie 2/50 (4.00 %) 7.40 s
Generate movie 3/50 (6.00 %) 7.21 s
Generate movie 4/50 (8.00 %) 7.11 s
Generate movie 5/50 (10.00 %) 6.93 s
Generate movie 6/50 (12.00 %) 6.75 s
Generate movie 7/50 (14.00 %) 6.58 s
Generate movie 8/50 (16.00 %) 6.47 s
Generate movie 9/50 (18.00 %) 6.32 s
Generate movie 10/50 (20.00 %) 6.15 s
Generate movie 11/50 (22.00 %) 6.03 s
Generate movie 12/50 (24.00 %) 5.88 s
Generate movie 13/50 (26.00 %) 5.80 s
Generate movie 14/50 (28.00 %) 5.56 s
Generate movie 15/50 (30.00 %) 5.42 s
Generate movie 16/50 (32.00 %) 5.20 s
Generate movie 17/50 (34.00 %) 5.10 s
Generate movie 18/50 (36.00 %) 4.94 s
Generate movie 19/50 (38.00 %) 4.78 s
Generate movie 20/50 (40.00 %) 4.51 s
Generate movie 21/50 (42.00 %) 3.21 s
Generate movie 22/50 (44.00 %) 4.27 s
Generate movie 23/50 (46.00 %) 4.17 s
Generate movie 24/50 (48.00 %) 4.06 s
Generate movie 25/50 (50.00 %) 3.84 s
Generate movie 26/50 (52.00 %) 3.70 s
Generate movie 27/50 (54.00 %) 3.55 s
Generate movie 28/50 (56.00 %) 3.41 s
Generate movie 29/50 (58.00 %) 3.24 s
Generate movie 30/50 (60.00 %) 3.07 s
Generate movie 31/50 (62.00 %) 2.91 s
Generate movie 32/50 (64.00 %) 2.77 s
Generate movie 33/50 (66.00 %) 2.63 s
Generate movie 34/50 (68.00 %) 2.48 s
Generate movie 35/50 (70.00 %) 2.33 s
Generate movie 36/50 (72.00 %) 2.19 s
Generate movie 37/50 (74.00 %) 2.02 s
Generate movie 38/50 (76.00 %) 1.87 s
Generate movie 39/50 (78.00 %) 1.71 s
Generate movie 40/50 (80.00 %) 1.55 s
Generate movie 41/50 (82.00 %) 1.40 s
Generate movie 42/50 (84.00 %) 1.25 s
Generate movie 43/50 (86.00 %) 1.10 s
Generate movie 44/50 (88.00 %) 937.52 ms
Generate movie 45/50 (90.00 %) 782.18 ms
Generate movie 46/50 (92.00 %) 616.61 ms
Generate movie 47/50 (94.00 %) 467.15 ms
Generate movie 48/50 (96.00 %) 310.76 ms
Generate movie 49/50 (98.00 %) 156.14 ms
Generate movie 50/50 (100.00 %) 0.00 µs
12 from EasyFEA import (
13 Display,
14 Folder,
15 Models,
16 plt,
17 Mesher,
18 ElemType,
19 Simulations,
20 PyVista,
21 )
22 from EasyFEA.Geoms import Circle, Domain, Point
23
24 if __name__ == "__main__":
25 Display.Clear()
26
27 # ----------------------------------------------
28 # Configuration
29 # ----------------------------------------------
30 dim = 3 # Set the simulation dimension (2D or 3D)
31
32 # outputs
33 folder = Folder.Join(Folder.RESULTS_DIR, "Thermal", "Thermal1")
34 makeMovie = True
35 result = "thermal"
36
37 # geom
38 a = 1
39
40 # load
41 Tmax = 0.5
42 N = 50
43 dt = Tmax / N
44
45 # ----------------------------------------------
46 # Mesh
47 # ----------------------------------------------
48 domain = Domain(Point(), Point(a, a), a / 4)
49 circle = Circle(Point(a / 2, a / 2), diam=a / 3, isHollow=True, meshSize=a / 4)
50
51 if dim == 2:
52 mesh = Mesher().Mesh_2D(domain, [circle], ElemType.TRI6)
53 else:
54 mesh = Mesher().Mesh_Extrude(
55 domain, [circle], [0, 0, -a], [4], ElemType.PRISM18
56 )
57
58 nodesX0 = mesh.Nodes_Conditions(lambda x, y, z: x == 0)
59 nodesXa = mesh.Nodes_Conditions(lambda x, y, z: x == a)
60 nodesCircle = mesh.Nodes_Cylinder(circle, [0, 0, -1])
61
62 if dim == 3:
63 print(f"Volume: {mesh.volume:.3}")
64
65 # ----------------------------------------------
66 # Simulation
67 # ----------------------------------------------
68 thermalModel = Models.Thermal(k=1, c=1, thickness=1)
69 simu = Simulations.ThermalSimu(mesh, thermalModel, False)
70 simu.rho = 1
71
72 simu.add_dirichlet(nodesX0, [0], ["t"])
73 simu.add_dirichlet(nodesXa, [40], ["t"])
74
75 # Set the parabolic algorithm for the solver
76 simu.Solver_Set_Parabolic_Algorithm(alpha=0.5, dt=dt)
77
78 t = -dt # init time
79 while t < Tmax:
80 t += dt
81
82 simu.Solve()
83 simu.Save_Iter()
84
85 print(f"{t:.3f} s", end="\r")
86
87 # ----------------------------------------------
88 # Results
89 # ----------------------------------------------
90 print(simu)
91
92 Display.Plot_Result(simu, result, plotMesh=True, nodeValues=True, folder=folder)
93
94 if makeMovie:
95 PyVista.Movie_simu(simu, result, folder, f"{result}.gif", plotMesh=True)
96
97 plt.show()
Total running time of the script: (0 minutes 13.189 seconds)