Atomschwingungsenergie (Gitterschwingungsenergie) wird durch den Temperaturgradienten im Material transportiert. Dies ist Wärmeleitung [1]. Infolgedessen ändert sich die Temperatur der Substanz im Laufe der Zeit und ändert sich schließlich nicht im Laufe der Zeit. Es hat einen stabilen Zustand erreicht. Wärmeleitung ist ein weit verbreitetes Phänomen im Alltag, und ihre technische Anwendung (Wärmeübertragungstechnik) ist eine der Grundlagen, die das heutige Leben unterstützen.
Nichtstationäre Wärmeleitungsgleichungen, die Temperaturschwankungen beschreiben, werden als parabolische partielle Differentialgleichungen klassifiziert. ** Elementare numerische Lösungen umfassen die zentrale Differenzmethode für den Raum und die explizite Methode (FTCS), die Vorwärtsdifferenzen für die Zeitentwicklung verwendet [2]. Die FTCS-Methode ist leicht zu verstehen und zu implementieren, aber die [numerische Stabilität] der Differentialgleichung (https://ja.wikipedia.org/wiki/%E6%95%B0%E5%80%A4%E7%9A% 84% E5% AE% 89% E5% AE% 9A% E6% 80% A7 # .E6.95.B0.E5.80.A4.E5.BE.AE.E5.88.86.E6.96.B9.E7 .A8.8B.E5.BC.8F.E3.81.A7.E3.81.AE.E5.AE.89.E5.AE.9A.E6.80.A7) ist nicht hoch. ** ** **
** [Crank-Nicholson-Methode](https://ja.wikipedia.org/wiki/%E5%B7%AE%E5%88%86%E6%B3%95#.E3.82.AF.E3.83 .A9.E3.83.B3.E3.82.AF.E3.83.BB.E3.83.8B.E3.82.B3.E3.83.AB.E3.82.BD.E3.83.B3. E6.B3.95) [2] ist eine der impliziten Methoden mit ausgezeichneter numerischer Stabilität (bedingungslose Stabilität). Es ist notwendig, simultane lineare Gleichungen zu lösen, um die Zeitentwicklung zu berechnen, und es ist schwieriger zu implementieren als die FTCS-Methode, aber zusätzlich zur Stabilität ist der Fehler in Bezug auf die Zeitentwicklung gering und nützlich zum Lösen parabolischer partieller Differentialgleichungen. Es ist eine der Methoden. ** ** **
** Hier wird die eindimensionale instationäre Wärmeleitungsgleichung nach der Crank-Nicholson-Methode gelöst. ** ** **
Interne Wärmeerzeugung $ q (x, t) $, thermische Gleichung gemäß der Temperatur $ T (x, t) $ eines Objekts mit einer konstanten thermischen Diffusionsrate $ D $,
$ \frac{\partial T(x,t)}{\partial t} = D \frac{\partial^2 T(x,t)}{\partial x^2} +q(x,t)$
$ T (x, 0) = 20 $ (Anfangsbedingung) $ T (0, t) = 0 $ (Randbedingung) $ T (100, t) = 50 $ (Randbedingung)
Zu
(1) Lösen Sie nach der Kurbel-Nicholson-Methode. Hier ist $ \ kappa $ die Wärmeleitfähigkeit, $ \ rho $ die Dichte und $ C_v $ die spezifische volumenspezifische Wärme.
(2) Lösen Sie nach der FTCS-Methode.
Treue Umsetzung. ** Ich verwende die linalg.solve-Methode von numpy, um eine eindimensionale simultane Gleichung zu lösen. ** ** **
"""
Eindimensionale instationäre Wärmeleitung
Kurbel-Nicholson-Methode
"""
%matplotlib notebook
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
Nx =100 #Gitterpunktzahl in x-Richtung
Nt =5000#Anzahl der Gitterpunkte in t-Richtung
Lx =0.01
Lt =1.5
delta_x=Lx/Nx
delta_t=Lt/Nt
r=delta_t/(delta_x**2)
print("r=",r)
uu = np.zeros([Nx,Nt]) #Funktion gesucht werden
#Anfangsbedingungen
#for i in range(1,Nx-1):
uu[:,0] = 20 #Anfangsbedingungen
#Randbedingung
for i in range(Nt):
uu[0,i] = 0
uu[-1,i] = 50
p=np.ones([Nx,Nt])
for i in range(Nx):
p[i,:] =4e-6
#print("stability=",p[0,0]*r)
q=np.zeros([Nx,Nt])
alpha=np.ones([Nx,Nt])
for i in range(Nx):
alpha[i,:]= r*p[i,:]/2
#Maine
for j in range(Nt-1):
Amat=np.zeros([Nx-2,Nx-2]) #Erzeugung einer Koeffizientenmatrix simultaner linearer Gleichungen
for i in range(Nx-2):
Amat[i,i] = 1/alpha[i,j] +2
if i >=1 :
Amat[i-1,i] = -1
if i <= Nx-4 :
Amat[i+1,i] = -1
bvec=np.zeros([Nx-2]) # Ax=Erzeugung des b-Vektors von b
for i in range(Nx-2):
bvec[i] = uu[i,j]+ (1/alpha[i+1,j] - 2)*uu[i+1,j]+uu[i+2,j]+q[i+1,j]
bvec[0] += uu[0,j+1]
bvec[Nx-3] += uu[-1,j+1]
uvec = np.linalg.solve(Amat ,bvec) #Löse simultane lineare Gleichungen
for i in range(Nx-2):
uu[i+1,j+1]=uvec[i]
#zur Visualisierung
x=list(range(Nx))
y=list(range(Nt))
X, Y = np.meshgrid(x,y)
def functz(u):
z=u[X,Y]
return z
Z = functz(uu)
fig = plt.figure()
ax = Axes3D(fig)
ax.plot_wireframe(X,Y,Z, color='r')
ax.set_xlabel('t')
ax.set_ylabel('x')
ax.set_zlabel('T')
plt.show()
Auftragung der Lösung.
Als nächstes betrachten wir den Zustand des Erreichens des thermischen Gleichgewichts mit Animation.
%matplotlib nbagg
from matplotlib.animation import ArtistAnimation #Importieren Sie Methoden zum Erstellen von Animationen
fig = plt.figure()
anim = [] #Eine Liste zum Speichern der Daten des für die Animation gezeichneten Para-Para-Diagramms
for i in range(Nt):
T=list(uu[:,i])
x=list(range(Nx))
if i % int(Nt*0.02) ==0:
im=plt.plot(x,T, '-', color='red',markersize=10, linewidth = 2, aa=True)
anim.append(im)
anim = ArtistAnimation(fig, anim) #Animationserstellung
plt.xlabel('x')
plt.ylabel('t')
fig.show()
anim.save("t.gif", writer='imagemagick') #Animation.Speichern Sie es als GIF und erstellen Sie eine GIF-Animationsdatei.
Mit der Zeit nähert sich die Temperatur konstant (stationärer Zustand).
"""
Eindimensionale instationäre Wärmeleitung
FTCS-Methode
"""
#%matplotlib nbagg
#matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation #Importieren Sie Methoden zum Erstellen von Animationen
#Konstante
L = 0.01
D= 4e-6 #Wärmediffusionsrate
N=100 #Anzahl der Schritte
del_L= L/N #Raumschrittgröße
del_t= 0.0001#Zeitschrittbreite
dum = del_t/1000
print("stability=",D*del_t/(del_L**2))
T_low = 0.0
T_mid = 20.0
T_high=50.0
#Illustriert
t1 = 0.01
t2 = 0.1
t3 = 0.4
t4 = 1.0
t5 = 10.0
t_end = t5 +dum
#
T = np.empty(N+1)
T[0] = T_high
T[N] = T_low
T[1:N] = T_mid
Tp = np.empty(N+1)
Tp[0] = T_high
Tp[N] = T_low
#Maine
t = 0.0
c = del_t*D/(del_L**2)
while t < t_end :
#Temperaturberechnung
# for i in range(1,N):
# Tp[i] = T[i] + c*(T[i+1]+T[i-1]-2*T[i])
Tp[1:N] = T[1:N] + c*(T[0:N-1]+T[2:N+1]-2*T[1:N])
T, Tp = Tp, T
t += del_t
#Zeichnen Sie mit dem ausgewählten t
if np.abs(t-t1) < dum :
plt.plot(T, label='t = t1')
if np.abs(t-t2) < dum :
plt.plot(T, label='t = t2')
if np.abs(t-t3) < dum :
plt.plot(T, label='t = t3')
if np.abs(t-t4) < dum:
plt.plot(T, label='t = t4')
if np.abs(t-t5) < dum :
plt.plot(T, label='t = t5')
plt.xlabel('x', fontsize=24)
plt.ylabel('T', fontsize=24)
plt.legend(loc='best')
plt.show()
Ein Diagramm des Temperaturprofils, das mehrmals ausgewählt wurde.
[1] Zur Ableitung der Wärmeleitungsgleichung Qiita-Artikel: "Ableitung der Wärmeleitungsgleichung" Ist höflich und leicht zu verstehen.
[2] Guo Shigeru Yamazaki, ["Einführung in die numerische Lösung partiell differenzierter Gleichungen"](https://www.google.co.id/search?q=%E5%B1%B1%E5%B4%8E+%E5% 81% 8F% E5% BE% AE% E5% 88% 86 & oq =% E5% B1% B1% E5% B4% 8E +% E5% 81% 8F% E5% BE% AE% E5% 88% 86 & aqs = Chrom. 69i57j0l5.2548j0j7 & sourceid = chrome & ie = UTF-8), Morikita Publishing Co., Ltd., 1993.
Zweidimensionale Wärmeleitungsgleichungen können auch mit der Crank-Nicholson-Methode gelöst werden, aber die Häufigkeit, mit der simultane lineare Gleichungen gelöst werden, nimmt zu. ** Unter der Annahme, dass die Anzahl der räumlichen Gitter $ Ns $ und das Zeitgitter $ Nt $ beträgt, ist es notwendig, ungefähr $ Nt \ mal Ns ^ N $ simultane lineare Gleichungen zu lösen, um die dimensionale Wärmeleitungsgleichung $ Ns $ zu lösen. Mit zunehmender Anzahl von Dimensionen steigen die Berechnungskosten der impliziten Methode nach der Crank-Nicholson-Methode erheblich. ** Eine der Methoden zur Reduzierung der Berechnungskosten ist ** Implizite Methode für alternierende Richtungen (ADI-Methode) **.
Zusätzlich zur Wärmeleitungsgleichung ist Diffusionsgleichung ein Beispiel, das in der Physik parabolischer partieller Differentialgleichungen vorkommt. % A1% E6% 95% A3% E6% 96% B9% E7% A8% 8B% E5% BC% 8F & oq =% E6% 8B% A1% E6% 95% A3% E6% 96% B9% E7% A8% 8B% E5% BC% 8F & aqs = chrome..69i57j69i61l2.193j0j7 & sourceid = chrome & ie = UTF-8) und zeitabhängig [Schledinger-Gleichung](https://ja.wikipedia.org/wiki/%E3%82%B7% E3% 83% A5% E3% 83% AC% E3% 83% BC% E3% 83% 87% E3% 82% A3% E3% 83% B3% E3% 82% AC% E3% 83% BC% E6% 96% B9% E7% A8% 8B% E5% BC% 8F) und so weiter.
Recommended Posts