郎之万顺磁理论模拟 | 寒山烟雨
现在的位置: 首页 > 滴水穿石 > 正文

郎之万顺磁理论模拟

2014年07月08日 滴水穿石 ⁄ 共 962字 ⁄ 字号 暂无评论 ⁄ 阅读 2,275 views 次

郎之万顺磁理论模拟,利用马尔科夫链,并加以模拟退火的方法,绘制出了顺磁体在外加磁场的作用下,感应磁场的大小。理论上该模型有严格解,从模拟的结果来看,还是比较符合理论的。

基本算法:(1)随机给定系统初态;(2)再次给定每个粒子态;(3)计算每个粒子该次与上次态的能量差dE;(4)dE<0,跃迁至该态,dE>0,按照麦克斯韦分布跃迁;(5)重复2~4步足够多的次数,系统总E达到一个稳定值,获得此时磁畴方向。

 

 Fortran | 
 
 copy code |
?

01
module Conts
02
    implicit none
03
    integer,parameter   ::Num=1000
04
    integer,parameter   ::Step=1000
05
    real(8),parameter   ::pi=3.1415926d0
06
    real(8),parameter   ::miu=1.d0 !9.27d-24
07
    real(8),parameter   ::kb=1.d0   !1.38d-23
08
end
09
 
10
program Main
11
    use Conts
12
    real(8)     ::T=100.d0
13
    real(8)     :: H,dH,addField,Eh,rou
14
    integer     ::i,j
15
    open(10,file="data.dat")
16
    call RANDOM_SEED()
17
    dH=0.02d0*T
18
    do i=1,step
19
        H=real(i)*dH
20
        Eh=addField(H,T)/(H*miu)
21
        rou=miu*H/(kb*T)
22
        write(10,*)H/T,-Eh,cosh(rou)/sinh(rou)-1.d0/rou
23
    enddo
24
end
25
 
26
real(8) function addField(H,T)
27
    use Conts
28
    integer     ::Moves=1000
29
    integer     ::i,j
30
    real(8)     ::E(Num),r1,r2,r3,temp,dE,p
31
    real(8)     ::H,T
32
    do i=1,Num
33
        call RANDOM_NUMBER(r1)
34
        call RANDOM_NUMBER(r2)
35
        E(i)=-H*miu*cos(r1*pi)*sin(r2*pi)
36
    enddo
37
 
38
    addField=0.d0
39
    do i=1,Moves
40
        do j=1,Num
41
            call Random_number(r1)
42
            call Random_number(r2)
43
            Temp=-H*miu*cos(r1*pi)*sin(r2*pi)
44
            dE=Temp-E(j)
45
            if (dE<0) then
46
                E(j)=Temp
47
            else
48
                p=EXP(-dE/(T*kb))
49
                call Random_number(r3)
50
                if (r3<=p) E(j)=Temp
51
            endif
52
        enddo
53
        if (i>Moves/2) addField=addField+sum(E)
54
    enddo
55
    addField=addField/(Num*Moves/2.)
56
end

Graph2

0

给我留言

留言无头像?


×