系の物性値の取得と表示

系の物性値

シミュレーションによって得られる物性値を取得し、画面に表示します。
ここでは

  • シミュレーション開始からの経過時間
  • 粒子の平均速さ
  • 粒子の平均運動エネルギー

を表示します。単位(s, min, ps など)を指定できるようにします。

gt = 0.0 #シミュレーション世界の経過時間

k_B = 1.38*10**-23 #ボルツマン 定数

def showtime(unit):    
    #gtを画面に表示 
    #メインループで、gt に t_scaleを加える処理を加えておく
    #unit 時間の単位
    if(unit=="s"):
        tstr = "%1.4f %s" % (gt, unit)
    if(unit=="min"):
        tstr = "%1.4f %s" % (gt/60.0, unit)
    if(unit=="ps"):
        tstr = "%1.4f %s" % (gt*10**12, unit)
            
    text1 = font1.render(tstr, True, (255, 255, 255)) #text1に文字列を出力
    screen.blit(text1,(10,10)) #画面に表示

def showspeed(): #ボールの速さの平均を取得、表示
    
    speed_total = 0 #速さの合計
    for x in range(0, ballnum): #ボールすべてについて処理をする
        speed_total += ball[x].get_speed()
    speed_ave = speed_total/ballnum

    tstr = "Average speed %1.3f m/s" % speed_ave
    
    text1 = font1.render(tstr, True, (255, 255, 255)) #text1に文字列を出力
    screen.blit(text1,(10,40)) #画面に表示

def showenergy(unit="J"):
    energy_total = 0 #運動 エネルギーの合計
    for x in range(0, ballnum): #ボールすべてについて処理をする
        energy_total += ball[x].get_energy()
    energy_ave = energy_total/ballnum

    if(unit=="J"):
        tstr = "Average energy %1.3f %s" % (energy_ave, unit)
    if(unit=="K"):    
        tstr = "Average energy %1.3f %s" % (energy_ave/k_B, unit)
    
    text1 = font1.render(tstr, True, (255, 255, 255)) #text1に文字列を出力
    screen.blit(text1,(10,70)) #画面に表示

    return(energy_ave/k_B) #メインループで使うので、K単位の平均エネルギーを返す