Note
Go to the end to download the full example code.
Thermal2#
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, dof = 4752
==================== Model ====================
Thermal :
thermal conductivity (k) : 1
thermal mass capacity (c) : 1
solver : pypardiso
============= Boundary Conditions =============
Unspecified.
=================== Results ===================
Unspecified.
=================== TicTac ===================
Mesh : 68.835 ms
Boundary Conditions : 22.411 µs
Matrix : 5.778 ms
Solver : 235.002 ms
Display : 189.767 ms
PyVista_Interface : 10.666 s
Movie_func 0/51
Movie_func 1/51 (1.96 %) 5.93 s
Movie_func 2/51 (3.92 %) 5.75 s
Movie_func 3/51 (5.88 %) 5.54 s
Movie_func 4/51 (7.84 %) 5.55 s
Movie_func 5/51 (9.80 %) 5.38 s
Movie_func 6/51 (11.76 %) 5.36 s
Movie_func 7/51 (13.73 %) 5.14 s
Movie_func 8/51 (15.69 %) 5.07 s
Movie_func 9/51 (17.65 %) 4.88 s
Movie_func 10/51 (19.61 %) 4.73 s
Movie_func 11/51 (21.57 %) 4.62 s
Movie_func 12/51 (23.53 %) 4.52 s
Movie_func 13/51 (25.49 %) 4.50 s
Movie_func 14/51 (27.45 %) 4.37 s
Movie_func 15/51 (29.41 %) 4.21 s
Movie_func 16/51 (31.37 %) 4.04 s
Movie_func 17/51 (33.33 %) 3.90 s
Movie_func 18/51 (35.29 %) 3.81 s
Movie_func 19/51 (37.25 %) 3.69 s
Movie_func 20/51 (39.22 %) 3.67 s
Movie_func 21/51 (41.18 %) 3.49 s
Movie_func 22/51 (43.14 %) 3.34 s
Movie_func 23/51 (45.10 %) 3.40 s
Movie_func 24/51 (47.06 %) 3.16 s
Movie_func 25/51 (49.02 %) 3.06 s
Movie_func 26/51 (50.98 %) 2.96 s
Movie_func 27/51 (52.94 %) 2.82 s
Movie_func 28/51 (54.90 %) 2.65 s
Movie_func 29/51 (56.86 %) 2.55 s
Movie_func 30/51 (58.82 %) 2.52 s
Movie_func 31/51 (60.78 %) 2.38 s
Movie_func 32/51 (62.75 %) 2.20 s
Movie_func 33/51 (64.71 %) 2.08 s
Movie_func 34/51 (66.67 %) 1.96 s
Movie_func 35/51 (68.63 %) 1.88 s
Movie_func 36/51 (70.59 %) 1.79 s
Movie_func 37/51 (72.55 %) 1.64 s
Movie_func 38/51 (74.51 %) 1.52 s
Movie_func 39/51 (76.47 %) 1.41 s
Movie_func 40/51 (78.43 %) 1.31 s
Movie_func 41/51 (80.39 %) 1.19 s
Movie_func 42/51 (82.35 %) 1.07 s
Movie_func 43/51 (84.31 %) 937.14 ms
Movie_func 44/51 (86.27 %) 833.83 ms
Movie_func 45/51 (88.24 %) 699.83 ms
Movie_func 46/51 (90.20 %) 583.67 ms
Movie_func 47/51 (92.16 %) 480.74 ms
Movie_func 48/51 (94.12 %) 360.63 ms
Movie_func 49/51 (96.08 %) 234.23 ms
Movie_func 50/51 (98.04 %) 117.75 ms
Movie_func 51/51 (100.00 %) 0.00 µs
12 from EasyFEA import (
13 Display,
14 Folder,
15 Models,
16 plt,
17 np,
18 Mesher,
19 ElemType,
20 Simulations,
21 PyVista,
22 )
23 from EasyFEA.Geoms import Line, Domain, Point
24
25 if __name__ == "__main__":
26 Display.Clear()
27
28 # ----------------------------------------------
29 # Configuration
30 # ----------------------------------------------
31
32 # outputs
33 folder = Folder.Join(Folder.RESULTS_DIR, "Thermal", "Thermal2")
34 makeMovie = True
35 result = "thermal"
36
37 # geom
38 R = 10
39 e = 2
40 h = 10
41 a = 1
42
43 # load
44 Tmax = 5
45 N = 50
46 dt = Tmax / N
47
48 # ----------------------------------------------
49 # Mesh
50 # ----------------------------------------------
51 domain = Domain(Point(R), Point(R + e, h), e / 2)
52 axis = Line(Point(), Point(0, 1, 0))
53
54 # Generate the mesh based on the specified dimension
55 angle = 360 * 3 / 4
56 mesh = Mesher().Mesh_Revolve(
57 domain,
58 [],
59 axis,
60 angle,
61 [angle * np.pi / 180 * R / domain.meshSize],
62 elemType=ElemType.HEXA8,
63 isOrganised=True,
64 )
65
66 nodesY0 = mesh.Nodes_Conditions(lambda x, y, z: y == 0)
67 nodesYH = mesh.Nodes_Conditions(lambda x, y, z: y == h)
68
69 # ----------------------------------------------
70 # Simulation
71 # ----------------------------------------------
72 thermalModel = Models.Thermal(k=1, c=1)
73 simu = Simulations.ThermalSimu(mesh, thermalModel, False)
74 simu.rho = 1
75
76 simu.add_surfLoad(nodesY0, [5], ["t"])
77 simu.add_surfLoad(nodesYH, [5], ["t"])
78
79 # Set the parabolic algorithm for the solver
80 simu.Solver_Set_Parabolic_Algorithm(alpha=0.5, dt=dt)
81
82 simu._Set_solutions(simu.problemType, np.ones(mesh.Nn) * -10)
83
84 print()
85 t = -dt # init time
86 while t < Tmax:
87 t += dt
88
89 simu.Solve()
90 simu.Save_Iter()
91
92 print(f"{t:.3f} s", end="\r")
93
94 # ----------------------------------------------
95 # Results
96 # ----------------------------------------------
97 print(simu)
98
99 Display.Plot_Result(simu, result, plotMesh=True, nodeValues=True, folder=folder)
100
101 if makeMovie:
102 PyVista.Movie_simu(simu, result, folder, f"{result}.gif", plotMesh=True)
103
104 plt.show()
Total running time of the script: (0 minutes 9.837 seconds)