前提・実現したいこと
現在、python3で以下のような2次元熱拡散方程式を解くプログラムを作っています。
ポワソン方程式を解くやり方(ヤコビ法:URL)を参考に解いてみようとしたのですが、ポワソン方程式では電荷の項が定数であるのに対し、添付の方程式では、T^4 の項が含まれており、おそらくここの処理でうまく行っていないようです。
https://qiita.com/sci_Haru/items/6b80c7eb8d4754fb5c2d
初歩的な質問かもしれませんが、プログラムがうまく実行されない原因について教えていただけると幸いです。
また、このやり方で画像のような方程式が解けるのかについて自信がないので、そもそもの方法が間違っているなどであればご指摘いただけると助かります。
発生している問題・エラーメッセージ
次のようなエラーメッセージが出て、メインのところでiterationが行われていないようです。 invalid value encountered in subtract
該当のソースコード
import numpy as np import matplotlib.pyplot as plt from matplotlib.animation import ArtistAnimation # アニメーション作成のためのメソッドをインポート anim = [] # delta_L=0.01 #グリッド幅 LL = 1 # 正方形の幅 L = int(LL/delta_L) V = 300.0 # 境界条件 convegence_criterion = 10**-5 T = np.zeros([L+1,L+1]) T[0,:] = V # 境界条件 T2 = np.empty ([L+1,L+1]) e = 1. #輻射率 sb = 5.67 #ステファンボルツマン定数(W/m^2*K^4) T0 = 300 #バックグラウンド室温(K) k = 72 #白金の熱伝導率(W/m*K) tf = 2.5*10**(-6) #箔の厚さ(m) Prad = 5.9*10**(-3) #レーザーパワー強度(W) #レーザーパワーの設定 rad = np.zeros([L+1,L+1]) laser_pix = 2 CC=int(L/2 - laser_pix/2) CC2=int(L/2 + laser_pix/2) # レーザーパワーを埋め込む for i in range(CC, CC2+1): for j in range(CC,CC2+1): rad[i,j] = Prad/(k*tf) #rad = np.empty([L+1,L+1]) #rad[:,:] = Prad/(k*tf) #for plot im=plt.imshow(T,cmap='hsv') anim.append([im]) # メイン delta = 1.0 n_iter=0 conv_check=[] while delta > convegence_criterion: if n_iter % 100 ==0: # 収束状況のモニタリング print("iteration No =", n_iter, "delta=",delta) conv_check.append([n_iter, delta]) for i in range(L+1): for j in range(L+1): if i ==0 or i ==L or j==0 or j==L: T2[i,j] = T[i,j] else: T2[i,j] = (T[i+1,j] + T[i-1,j] + T[i,j+1] + T[i,j-1])/4 + e*sb*(T[i,j]**4 - T0**4)/(k*tf) + rad[i,j] delta = np.max(abs(T-T2)) T, T2 = T2, T n_iter+=1 im=plt.imshow(T,cmap='hsv') anim.append([im]) #for plot pp=plt.colorbar (orientation="vertical") # カラーバーの表示 pp.set_label("T", fontname="Ariel", fontsize=24) plt.xlabel('X',fontname="Ariel", fontsize=24) plt.ylabel('Y',fontname="Ariel", fontsize=24) #ani = ArtistAnimation(fig, anim, interval=10, blit=True,repeat_delay=1000) #ani.save("t.gif", writer='imagemagick') plt.show()
試したこと
型が一致しているかの確認
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/09/30 03:25