Note
Go to the end to download the full example code.
Steady-State 2D Plate#
Solve the temperature distribution of a 2D aluminium plate with fixed boundary conditions on two edges.
Left edge (i = 1): T = 300 K (hot)
Bottom edge (j = 1): T = 100 K (cold)
Right and top edges: adiabatic (no heat flow)
Interior and remaining edges: diffusive
Model setup#
We use a 10 × 10 grid of thermal nodes connected by conductive couplings derived from the aluminium thermal conductivity.
import matplotlib.pyplot as plt
import numpy as np
import pycanha as pc
import pycanha.tmm as pm
# Physical data
Lx, Ly = 1.0, 1.0 # plate dimensions [m]
t_plate = 1e-2 # thickness [m]
k_Al = 180.0 # thermal conductivity [W/(m·K)]
# Mesh
Nx, Ny = 10, 10
tm = pc.ThermalModel(name="AluPlate")
tmm = tm.tmm
for j in range(1, Ny + 1):
for i in range(1, Nx + 1):
node_num = i + (j - 1) * Nx
node = pm.Node(node_num)
if i == 1 or j == 1:
node.type = pm.NodeType.BOUNDARY
tmm.add_node(node)
Conductive couplings#
coupling_value = k_Al * t_plate / (Lx / (Nx - 1))
# Horizontal
for j in range(1, Ny + 1):
for i in range(1, Nx):
tmm.conductive_couplings.add_coupling(
i + (j - 1) * Nx, (i + 1) + (j - 1) * Nx, coupling_value
)
# Vertical
for j in range(1, Ny):
for i in range(1, Nx + 1):
tmm.conductive_couplings.add_coupling(i + (j - 1) * Nx, i + j * Nx, coupling_value)
Boundary temperatures#
Solve and plot#
solver = tm.solvers.sslu
solver.initialize()
solver.solve()
temp_matrix = np.zeros((Ny, Nx))
for j in range(1, Ny + 1):
for i in range(1, Nx + 1):
temp_matrix[j - 1, i - 1] = tmm.nodes.get_T(i + (j - 1) * Nx)
plt.figure(figsize=(6, 5))
plt.imshow(
temp_matrix,
cmap="viridis",
origin="lower",
extent=[0, Lx, 0, Ly],
aspect="equal",
)
plt.colorbar(label="Temperature (K)")
plt.xlabel("x (m)")
plt.ylabel("y (m)")
plt.title("2-D Aluminium Plate — Steady-state Temperature")
plt.tight_layout()
plt.show()