### 前提・実現したいこと
プログラミング未経験の者です。以下リンク、科学技術計算講座3-熱伝導方程式シミュレーションリンク内容を参考にして、厚さ1mmのSi材料にレーザー光を一定時間、一部分のみに照射したときの試料の温度分布を求めたいと思っています。
試料は一次元方向のみ考えているため、lx = 1mm、Δx=10㎛で空間方向を100分割しています。codeの#疑問点①~③にも示してありますが、レーザー光照射による吸収熱(単位:℃/s)Q=40000000000を設定し、その吸収熱が表面からの距離x=50㎛(x軸の要素番号をiとして表面i=0であるからQ[5]?)の場所に計算開始0~50nsの間だけかかっている(それ以降はQ=0)とした場合、codeでは位置、時間の選択をどのように指定すればよいのか教えていただきたいです。
また何か不備等ありましたらご指摘お願い致します。
import
1import matplotlib.animation as animation 2import numpy as np 3 4# input parameter 5(材料をSiに変更、厚さ1㎜、微小間隔 dx:10㎛、計算期間1μs、時間間隔1nsに変更、表面温度を固定しないためtemp_bcを消去) 6den = 2330.0 7cp = 678.0 8cond = 83.7 9temp_init = 0.0 10lx = 0.001 11nx = 101 12tend = 0.000001 13dt = 0.000000001 14tout =0.000001 15 16alpha = cond / (den * cp) 17dx = lx / (nx - 1) 18nt = int(tend / dt) 19nout = int(tout / dt) 20 21 22# レーザー光照射による吸収熱の設定(単位:℃/s)※50ns間照射して2000℃上昇を想定 23for n in range(1, nt+1): 24 Q[i]=40000000000*dt*n 25 26# レーザー照射位置を表面からの距離x=50㎛(i=0~101で離散化しているためQ[5]?)(疑問点①) 27for i in range(nx): 28 if i=5 : 29 Q[5]=40000000000*dt*n 30else : 31 Q[i]=0.0 32 33 34# レーザー光照射時間の設定(0~50nsの間だけ照射、それ以降はQ=0)(疑問点②) 35t_intv= 0.00000005 36 37for n in range(1, nt+1): 38 if time < t_intv : 39 Q[5]=40000000000*dt*n 40 else : 41 Q[5]=0.0 42 43 44#initial condition 45temp = np.full(nx, temp_init) 46time = 0.0 47 48temp_new = np.zeros(nx) 49 50# Boundary condition(表面温度temp[0]固定の# Dirichlet @ x=0条件をNeumann条件に変更) 51temp[0] = temp[1] 52temp[nx-1] = temp[nx-2] # Neumann @ x=Lx 53 54# graph data array 55ims = [] 56fig = plt.figure() 57ax = fig.add_subplot(1, 1, 1) 58 59gx = np.zeros(nx) 60for i in range(nx): 61 gx[i] = i * dx 62 63# time loop 64for n in range(1, nt+1): 65 66 # FTCS(右辺第一項に吸収熱を設定する) (疑問点③) 67 for i in range(1, nx-1): 68 temp_new[i] = Q[i]+temp[i] + dt * alpha * (temp[i+1] - 2.0 * temp[i] + temp[i-1]) / (dx * dx) 69 70 # update 71 for i in range(1, nx-1): 72 temp[i] = temp_new[i] 73 74 # Boundary condition(表面温度temp[0]固定の# Dirichlet @ x=0条件をNeumann条件に変更) 75 temp[0] = temp[1] 76 temp[nx-1] = temp[nx-2] # Neumann @ x=Lx 77 78 time += dt 79 80 if n % nout == 0: 81 print('n: {0:7d}, time: {1:8.1f}, temp: {2:10.6f}'.format(n, time, temp[nx-1])) 82 im_line = ax.plot(gx, temp, 'b') 83 im_time = ax.text(0, 110, 'Time = {0:8.1f} [s]'.format(time)) 84 ims.append(im_line + [im_time]) 85 86# graph plot 87ax.set_xlabel('x [m]') 88ax.set_ylabel('Temperature [C]') 89ax.grid() 90anm = animation.ArtistAnimation(fig, ims, interval=50) 91anm.save('animation.gif', writer='pillow') 92plt.show() 93
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/08/31 03:38
2021/08/31 04:28 編集
2021/09/03 08:28