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


0.000 s
0.100 s
0.200 s
0.300 s
0.400 s
0.500 s
0.600 s
0.700 s
0.800 s
0.900 s
1.000 s
1.100 s
1.200 s
1.300 s
1.400 s
1.500 s
1.600 s
1.700 s
1.800 s
1.900 s
2.000 s
2.100 s
2.200 s
2.300 s
2.400 s
2.500 s
2.600 s
2.700 s
2.800 s
2.900 s
3.000 s
3.100 s
3.200 s
3.300 s
3.400 s
3.500 s
3.600 s
3.700 s
3.800 s
3.900 s
4.000 s
4.100 s
4.200 s
4.300 s
4.400 s
4.500 s
4.600 s
4.700 s
4.800 s
4.900 s
5.000 s
5.100 s
==================== Mesh ====================
Element type: HEXA8
Ne = 940, Nn = 1584
==================== Model ====================
Thermal :
thermal conductivity (k) : 1
thermal mass capacity (c) : 1
solver : pypardiso
============= Boundary Conditions =============
Unspecified.
=================== Results ===================
Unspecified.
=================== TicTac ===================
Mesh : 199.841 ms
Boundary Conditions : 65.088 µs
Matrix : 58.138 ms
Solver : 622.497 ms
PyVista_Interface : 21.921 s
Generate movie 0/51
Generate movie 1/51 (1.96 %) 12.34 s
Generate movie 2/51 (3.92 %) 11.87 s
Generate movie 3/51 (5.88 %) 11.79 s
Generate movie 4/51 (7.84 %) 11.57 s
Generate movie 5/51 (9.80 %) 11.24 s
Generate movie 6/51 (11.76 %) 10.94 s
Generate movie 7/51 (13.73 %) 10.57 s
Generate movie 8/51 (15.69 %) 10.38 s
Generate movie 9/51 (17.65 %) 10.04 s
Generate movie 10/51 (19.61 %) 9.96 s
Generate movie 11/51 (21.57 %) 9.82 s
Generate movie 12/51 (23.53 %) 9.47 s
Generate movie 13/51 (25.49 %) 9.21 s
Generate movie 14/51 (27.45 %) 8.97 s
Generate movie 15/51 (29.41 %) 8.84 s
Generate movie 16/51 (31.37 %) 8.65 s
Generate movie 17/51 (33.33 %) 8.39 s
Generate movie 18/51 (35.29 %) 8.18 s
Generate movie 19/51 (37.25 %) 7.67 s
Generate movie 20/51 (39.22 %) 7.63 s
Generate movie 21/51 (41.18 %) 7.36 s
Generate movie 22/51 (43.14 %) 7.12 s
Generate movie 23/51 (45.10 %) 6.83 s
Generate movie 24/51 (47.06 %) 6.55 s
Generate movie 25/51 (49.02 %) 6.39 s
Generate movie 26/51 (50.98 %) 6.16 s
Generate movie 27/51 (52.94 %) 5.80 s
Generate movie 28/51 (54.90 %) 5.60 s
Generate movie 29/51 (56.86 %) 5.35 s
Generate movie 30/51 (58.82 %) 5.03 s
Generate movie 31/51 (60.78 %) 4.87 s
Generate movie 32/51 (62.75 %) 4.63 s
Generate movie 33/51 (64.71 %) 4.38 s
Generate movie 34/51 (66.67 %) 4.15 s
Generate movie 35/51 (68.63 %) 3.76 s
Generate movie 36/51 (70.59 %) 3.70 s
Generate movie 37/51 (72.55 %) 3.53 s
Generate movie 38/51 (74.51 %) 3.22 s
Generate movie 39/51 (76.47 %) 2.99 s
Generate movie 40/51 (78.43 %) 2.25 s
Generate movie 41/51 (80.39 %) 2.49 s
Generate movie 42/51 (82.35 %) 2.24 s
Generate movie 43/51 (84.31 %) 1.99 s
Generate movie 44/51 (86.27 %) 1.73 s
Generate movie 45/51 (88.24 %) 1.49 s
Generate movie 46/51 (90.20 %) 1.23 s
Generate movie 47/51 (92.16 %) 988.95 ms
Generate movie 48/51 (94.12 %) 739.03 ms
Generate movie 49/51 (96.08 %) 494.42 ms
Generate movie 50/51 (98.04 %) 242.78 ms
Generate movie 51/51 (100.00 %) 0.00 µs
12 from EasyFEA import Display, Folder, Models, np, Mesher, ElemType, Simulations, PyVista
13 from EasyFEA.Geoms import Line, Domain, Point
14
15 if __name__ == "__main__":
16 Display.Clear()
17
18 # ----------------------------------------------
19 # Configuration
20 # ----------------------------------------------
21
22 # outputs
23 folder = Folder.Join(Folder.RESULTS_DIR, "Thermal", "Thermal3")
24 makeMovie = True
25 result = "thermal"
26
27 # geom
28 R = 10
29 e = 2
30 h = 10
31 a = 1
32
33 # load
34 Tmax = 5
35 N = 50
36 dt = Tmax / N
37
38 # ----------------------------------------------
39 # Mesh
40 # ----------------------------------------------
41 domain = Domain(Point(R), Point(R + e, h), e / 2)
42 axis = Line(Point(), Point(0, 1, 0))
43
44 # Generate the mesh based on the specified dimension
45 angle = 360 * 3 / 4
46 mesh = Mesher().Mesh_Revolve(
47 domain,
48 [],
49 axis,
50 angle,
51 [angle * np.pi / 180 * R / domain.meshSize],
52 elemType=ElemType.HEXA8,
53 isOrganised=True,
54 )
55
56 nodesY0 = mesh.Nodes_Conditions(lambda x, y, z: y == 0)
57 nodesYH = mesh.Nodes_Conditions(lambda x, y, z: y == h)
58
59 # ----------------------------------------------
60 # Simulation
61 # ----------------------------------------------
62 thermalModel = Models.Thermal(k=1, c=1)
63 simu = Simulations.ThermalSimu(mesh, thermalModel, False)
64 simu.rho = 1
65
66 simu.add_surfLoad(nodesY0, [5], ["t"])
67 simu.add_surfLoad(nodesYH, [5], ["t"])
68
69 # Set the parabolic algorithm for the solver
70 simu.Solver_Set_Parabolic_Algorithm(alpha=0.5, dt=dt)
71
72 simu._Set_solutions(simu.problemType, np.ones(mesh.Nn) * -10)
73
74 print()
75 t = -dt # init time
76 while t < Tmax:
77 t += dt
78
79 simu.Solve()
80 simu.Save_Iter()
81
82 print(f"{t:.3f} s", end="\r")
83
84 # ----------------------------------------------
85 # Results
86 # ----------------------------------------------
87 print(simu)
88
89 PyVista.Plot(simu, result, plotMesh=True, nodeValues=True)
90
91 if makeMovie:
92 PyVista.Movie_simu(simu, result, folder, f"{result}.gif", plotMesh=True)
Total running time of the script: (0 minutes 19.142 seconds)