温度調整

温度調整

LJ相互作用を働かせると、ポテンシャルエネルギーが生じるため、分子の運動エネルギーは一定ではなくなる。
ここまでやってきた方法(粒子間の力を計算して、運動方程式に従って分子を動かす)では、系のエネルギー(運動エネルギー + ポテンシャルエネルギー)が一定に保たれる (ミクロカノニカルアンサンブル)。

系の温度 (運動エネルギー) を制御するには、目標温度を設定し、それに合わせて分子の速度を変えればよい。(カノニカルアンサンブル)

#粒子をあらわすクラス
class Ball:
    #粒子のクラスの中に、速度を変える関数を追加
    def change_speed(self, k):
        #速度を k倍する
        self.vx *= k
        self.vy *= k

obj_temp = 20.0 #目標温度

while True: #無限ループ

    screen.fill( (0,0,0) ) #黒で塗りつぶす
    showtime("ps")
    showspeed()
    ave_temp = showenergy("K") #分子の平均エネルギー(単位: K)を取得

    #系の温度と目標温度を比較する
    if(ave_temp>obj_temp*1.002): #目標より0.2%以上温度が高い
        for x in range(0, ballnum): #全ての分子について
            ball[x].speed_change(0.999) #0.1%遅くする
    if(ave_temp<obj_temp*0.998): #目標より0.2%以上温度が低い
        for x in range(0, ballnum): #全ての分子について
            ball[x].speed_change(1.001) #0.1%速くする