後期、4個目のSACLAビームタイムが終了

イメージ
厳くんのビームタイム(100テスラXFEL回折)があり、先週の月から金でSACLAに滞在していた。実験は順調に進み、3種類ものサンプルのデータがとれた。大きな変化という意味では一つのサンプルが大成功で、あとはちょっと磁場が足りないことが判明した。データクオリティはめちゃ高かったので雰囲気も良かった。11 keVシードビームの安定性も高い。 今回は今まで自分がやっていた作業も含めて、学生さんたちにかなり任せて活躍してもらった。学生さんたちはとても良くやってくれました。(自分でやるよりもずっと早くて上手だと判明) フルショットを打ちまくって、検出器にデブリがとびまくった。久保田さんが心配そうにしているので、新プロテクターを作らなくてはだめだ。 2.5日のビームタイムで破壊ショット20発。2発はミスでデータなし。前回・前々回に引き続き非常に良いビームタイムでした。PINK-02の実験が共用実験っぽくなってきてよかったよかった。後期で4つめのPINK-SACLAのビームタイムが終了したのでやっと安心。低温・強磁場・X線の準備が整っていたのでうまくいったと思う。年間ではPINK-SACLAが5件。その他、野尻・プラズマも合わせると、7件のSACLA実験があった。それ以外に関西研にも行った。ナノテラスも3月に行くかも。今年度は今までで一番多かった。 来年度は前期に3つ。後期はどうなるか。SPring-8や関西研もありそう。少し時間があったので、SPring-8のビームラインで打ち合わせがてら装置を見たり、兵庫県立大にも短い時間滞在した。効率的に過ごせた。 週末はアートの展覧会にお呼ばれして行き、ちょっとおしゃべりもしてきた。動画を後日見せてもらったが、さすがに、伸びシロしかない・・・。 連休中、調布ではトトロが再上映。家族で観覧した。 ここ1年ほどは映画館で新作・リバイバルを見るのがブーム 国宝 チェンソーマン レゼ編(2~3回) PERFECT BLUE もののけ姫 IMAX(2回) エヴァンゲリオン Air/まごころを君に となりのトトロ 時計じかけのオレンジ その他にこどもと おまえうまそうだな すみっコぐらし クリーミーマミ ズートピア2 時計じかけのオレンジに影響されて、赤ワインを飲んだり、聖書を買って読んだりした。 聖書は意外に読みやすく、最後まで目を通した。めっち...

Monte Calro simulation of Ising model using python

 



pythonでIsing modelのシミュレータができました。
ふう。For文がネストしていますが、思ったよりはサクサク動きます。
みんな使ってみてね。



import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
%matplotlib tk

fig = plt.figure()
size = 50 # lattice size
jex =  100 # exchange energy (AFM -> negative, FM -> positive)
te = 150 # temperature
rand = np.random.randint(2,size = (size, size))
rand = rand * 2 - 1
np.save('test.npy', rand)

def ising(dat):
    s = dat
    
    for i in np.arange(size):
        for j in np.arange(size):
            ip = i + 1 if i != size - 1 else 0
            im = i - 1 if i != 0 else size - 1
            jp = j + 1 if j != size - 1 else 0
            jm = j - 1 if j != 0 else size - 1
            
            cal = s[i][j] * (s[i][jp] + s[i][jm] + s[ip][j] + s[im][j])
            den = cal * 2
            p_flip= np.exp(-1 * (den * jex) / te)
            
            p = p_flip / (1 + p_flip)
            
            s[i][j] = s[i][j] if np.random.rand(1) > p else s[i][j] * -1
            # print(i, j)

    a = s 
    return a

def plot(i):
    plt.cla()                     
    dat = np.load('test.npy') # input
    dat = ising(dat)
    np.save('test.npy', dat) # output
    im = plt.imshow(dat, vmin=-1, vmax=1, cmap='gray') 
    plt.title(f'Ising model simulator ($T$ = {te} K, $J$ = {jex} K)\n Monte Calro step = ' + str(i))

## just for seeing 
ani = animation.FuncAnimation(fig, plot, interval = 50)
plt.show()

## for saving as gif file
# ani = animation.FuncAnimation(fig, plot, interval=100, frames=500)
# ani.save("output.gif", writer="imagemagick")

上記のising()ではスピンをフリップするか考えるサイトを、順番に回して、全ピクセルを一周したら1stepとしています。 下記のising2()では、スピンをフリップするか考えるサイトを乱数で決定しています。格子サイズの2乗回計算したら、1stepとしています。 どちらも使えますが、ising()の方が少し早いみたいです。なぜか。。

def ising2(dat):
    s = dat
    
    for k in range(size ** 2):
        ran = np.random.randint(size, size = (1, 2))
        i = ran[0][0]
        j = ran[0][1]
        ip = i + 1 if i != size - 1 else 0
        im = i - 1 if i != 0 else size - 1
        jp = j + 1 if j != size - 1 else 0
        jm = j - 1 if j != 0 else size - 1

        cal = s[i][j] * (s[i][jp] + s[i][jm] + s[ip][j] + s[im][j])
        den = cal * 2
        p_flip= np.exp(-1 * (den * jex) / te)

        p = p_flip / (1 + p_flip)

        s[i][j] = s[i][j] if np.random.rand(1) > p else s[i][j] * -1


    a = s 
    return a

もとのigorのプログラムは、




ここを読んでて書いたものです。

今回のpythonのプログラムは適当に書いたので、
特にスピンをフロップさせる条件がちょっと間違っているかもしれません。
メトロポリス法とか熱浴法とかあるはずなんですが、どっちにもなってないかも。

わかる人は教えていただけたらうれしいです。

コメント

このブログの人気の投稿