Il faudrait savoir dans quel cadre la question se pose, parce au vu de la géométrie l'écriture dun code à partir de zéro parait représenter une tache considérable.
A mon avis (mais c'est uniquement le mien...), cela ressort de l'utilisation d'un logiciel de type COMSOl ANSYS SimScale ...
On pourrait après comparer avec l'approximation Python.
-----



. Toutefois,ça me parrait étrange que tout mon disque soit à la même température en si peu de temps ( sans compter la bande chauffer par frottements), à noter que j'ai mis le disque (hors parties chauffée) à la température de l'air à t=0 .
# Définition de la matrice:
tick_simu = 10
v = np.empty((duree_simu, np.shape(image_disque)[0], np.shape(image_disque)[1]))
# conditions initiales:
T_ini2 = 46.8 + 273.15 #K
T_air2 = 25.3 + 273.15 #K
T_metal = 35 + 273.15 #K
#milieu du cercle:
x_mi = np.shape(image_disque)[0]/2
y_mi = np.shape(image_disque)[1]/2
vide = np.zeros((np.shape(image_disque)[0], np.shape(image_disque)[1]), dtype=bool)
for i in range(0, np.shape(image_disque)[0]):
for j in range(0, np.shape(image_disque)[1]):
pixel = image_disque.getpixel((j, i))
if pixel == (0, 247, 64, 255):
v[0, i, j] = T_air2
vide[i, j] = True
elif np.sqrt((i - x_mi)**2 + (j - y_mi)**2) >= 400 / red and np.sqrt((i - x_mi)**2 + (j - y_mi)**2) <= 448 / red and pixel != (0, 247, 64, 255):
v[0, i, j] = T_ini2
else:
v[0, i, j] = T_air2
dx = (16E-2) / np.shape(image_disque)[0] # largeur réelle divisée par nombre pixels
A = (dt*lambd / ( rho * C_th * dx**2))
B = (2*dt*h) / (e*rho*C_th)
C = (2*dt*epsilon * sigma ) / (e*rho*C_th)
nX= np.shape(image_disque)[0]
nY = np.shape(image_disque)[1]
@njit
def calculate(v):
for k in range(1, tick_simu - 1):
for i in range(1, nX-1):
for j in range(0, nY-1):
if vide[i, j] != True :
v[k+1, i, j] = v[k, i, j] + A * (v[k, i+1, j] + v[k, i-1, j] + v[k, i, j+1] + v[k, i, j-1]) / 4 - (B * (v[k, i, j] - T_air2) + C * (v[k, i, j]**4 - T_air2**4))
return v
v = calculate(v)
plt.imshow(v[5], cmap='viridis', origin='lower', extent=(0, np.shape(image_disque)[1], 0, np.shape(image_disque)[0]))
# Définissez les valeurs personnalisées pour l'axe des ordonnées et abscisses
y_ticks = np.linspace(0, np.shape(image_disque)[0], 9) # Crée 9 valeurs de 0 à la hauteur de l'image
x_ticks = np.linspace(0, np.shape(image_disque)[1], 9) # Crée 9 valeurs de 0 à la largeur de l'image
plt.yticks(y_ticks, [-8, -6, -4, -2, 0, 2, 4, 6, 8]) # Personnalisez les étiquettes de l'axe des ordonnées
plt.xticks(x_ticks, [-8, -6, -4, -2, 0, 2, 4, 6, '8 cm']) # Personnalisez les étiquettes de l'axe des abscisses
plt.colorbar(label='Température (K)')
plt.show()
hmmmm