ただのメモ

他の人に見せても良い方のメモ

境界条件(熱伝導計算)

  • 境界条件について知りたくなった。(そして、誰かに話したくなった。)
    • わかりやすくまとめて、話せる原稿にしたい。
  • 始めましょうか。
  • 境界条件とは、
  • お絵かきする
    • こちらそちらを参考にする。
    • 参考にしつつ、先の資料の陽解法の課題を、後の資料のコードをいじり、混合条件用に書き下す。
import numpy as np
import matplotlib.pyplot as plt
#%matplotlib nbagg
import matplotlib.animation as animation


imax=100
jmax=imax
ntmax=2500
dt=0.004
kp=1
xmax=10
ymax=10
dx=xmax/imax
dy=ymax/jmax


X = np.linspace(0, xmax, imax)
Y = np.linspace(0, ymax, jmax)
temp=np.zeros([imax,jmax])

x2,y2=np.meshgrid(X,Y)

#initial state
for j in range(jmax):
    for i in range(imax):
        x=dx*i
        y=dy*j
        if (i<imax/2):
            temp[j,i]=x
        else:
            temp[j,i]=xmax-x


plt.pcolor(x2,y2,temp,cmap ='hsv')
plt.colorbar()

a = 0.01
fig = plt.figure()
ims=[]
for t in range(0,ntmax):
    for j in range(0,imax):
        for i in range(0,jmax):
            if j *i != 0 and (j-imax+1)*(i-jmax+1) != 0:
                temp[j,i]=temp[j,i]+kp*dt/(dx*dx)*(temp[j,i+1]-2*temp[j,i]+temp[j,i-1])+kp*dt/(dy*dy)*(temp[j+1,i]-2*temp[j,i]+temp[j-1,i])
            elif i == 0 or i == jmax-1:
                pass
            else:
                if j == 0:
                    temp[j,i] = temp[j+1,i] - a*dx
                elif j == imax-1:
                    temp[j,i] = temp[j-1,i] + a*dx

    if (t%100==0):
        im = plt.imshow(temp,animated=True,cmap ='seismic')
        ims.append([im])


plt.colorbar()
plt.xlabel("x")
plt.ylabel("y")

ani = animation.ArtistAnimation(fig, ims, interval=50, blit=True,repeat_delay=10)

plt.show()

 

 

f:id:medical-science:20220228130657p:plain

f:id:medical-science:20220228132725p:plain

方程式をシミュレーションした結果、熱が右に移動している。ちゃんとシミュレーション出来ているので良しとする。

バイバイ!