Modelling of heat propagation in a semi-infinite plate¶
This example demonstrates the modelling of heat propagation in a two-dimensional semi-infinite plate.
The heat transfer process is generally described by Eq:
$$ \frac{\partial T}{\partial t} = \alpha \nabla^2 T $$
Using Euler's method, to calculate the heat propagation in a semi-infinite plate, the equation was converted into difference form:
$$ T_{i+1,j,k} = T_{i,j,k} + h \cdot \frac{1}{c \cdot m} \left( A \cdot F \cdot \frac{T_{i,j-1,k} - T_{i,j,k}}{d} + A \cdot F \cdot \frac{T_{i,j+1,k} - T_{i,j,k}}{d} + A \cdot F \cdot \frac{T_{i,j,k-1} - T_{i,j,k}}{d} + A \cdot F \cdot \frac{T_{i,j,k+1} - T_{i,j,k}}{d} \right) $$
The equation describes the heat transfer process in a two-dimensional medium. It models the temperature change at spatial points (two spatial coordinates X and Y and one time coordinate) as a result of heat transfer between them.
Connection of libraries for data visualisation and creation of gif animations:
Pkg.add(["Animations"])
using Plots
using Animations
Defining source data:
c = 903.7
m = 0.003375
A = 235.9
F = 0.00025
d = 0.01
L = 0.14
q = 1400.0
h = 0.1
Definition of initial conditions
T0 = 293.15 # начальная температура пластины
Ny = 20 # количество точек по оси Y
Nx = 20 # количество точек по оси X
Nt = 3000 # количество временных шагов
T = fill(T0, (Nt, Nx, Ny)); # температура для каждого элемента
Setting the boundary conditions:
T[:, end, :] .= 293.15; # Температура среды справа (x = L)
Calculation of temperatures and heat fluxes:
@time for i in 1:Nt-1 # количество временных шагов
for k in 1:Ny # цикл по координате Y
for j in 2:Nx-1 # цикл по координате X
# Обновление температуры
T[i + 1, j, k] = T[i, j, k] + h * (
(1 / (c * m)) * (
A * F * (T[i, j - 1, k] - T[i, j, k]) / d + # тепловой поток от левого отрезка
A * F * (T[i, j + 1, k] - T[i, j, k]) / d + # тепловой поток от правого отрезка
(k > 1 ? A * F * (T[i, j, k - 1] - T[i, j, k]) / d : 0) + # теплопередача от элемента сверху
(k < Ny ? A * F * (T[i, j, k + 1] - T[i, j, k]) / d : 0) # теплопередача от элемента снизу
)
)
# определение постоянного источника тепла
if T[i+1, 5, 1] < 350.0
T[i+1, 1:20, 1] = T[i+1, 1:20, 1] .+ 0.05 # источник тепла
else
T[i+1, 1:20, 1] .= 350.0
end
end
end
end
Creating animations:
@time anim = @animate (for i in 1:Int(Nt / 50)
heatmap((T[i, :, :]), color=:thermal, title="Температура в пластине (Секунда $(i*5))", xlabel="X (м)", ylabel="Y (м)", size=(400, 400), clims=(290, 340))
end)
Saving an animation to a GIF:
gif(anim, "heat_distribution_plate.gif", fps=10)