二维Ising模型的程序设计.docx

上传人:b****6 文档编号:13132974 上传时间:2023-06-11 格式:DOCX 页数:12 大小:76.05KB
下载 相关 举报
二维Ising模型的程序设计.docx_第1页
第1页 / 共12页
二维Ising模型的程序设计.docx_第2页
第2页 / 共12页
二维Ising模型的程序设计.docx_第3页
第3页 / 共12页
二维Ising模型的程序设计.docx_第4页
第4页 / 共12页
二维Ising模型的程序设计.docx_第5页
第5页 / 共12页
二维Ising模型的程序设计.docx_第6页
第6页 / 共12页
二维Ising模型的程序设计.docx_第7页
第7页 / 共12页
二维Ising模型的程序设计.docx_第8页
第8页 / 共12页
二维Ising模型的程序设计.docx_第9页
第9页 / 共12页
二维Ising模型的程序设计.docx_第10页
第10页 / 共12页
二维Ising模型的程序设计.docx_第11页
第11页 / 共12页
二维Ising模型的程序设计.docx_第12页
第12页 / 共12页
亲,该文档总共12页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

二维Ising模型的程序设计.docx

《二维Ising模型的程序设计.docx》由会员分享,可在线阅读,更多相关《二维Ising模型的程序设计.docx(12页珍藏版)》请在冰点文库上搜索。

二维Ising模型的程序设计.docx

二维Ising模型的程序设计

二维Ising模型的程序设计

一、课题名称:

二维Ising模型的程序设计

二、班级和姓名:

***

三、主要容:

1.研究的容和算法:

Ising模型最初由Lenz提出和用来作为铁磁性的一个模型。

后来成为他的研究生Ising的博士论文的题目。

1925年,Ising给出了一维情况下的解,该解显示,在一维情况下,Ising模型没有相变解。

1944年,Onsager得到了二维Ising模型的准确解,二维时就有了相变。

对于三维,至今还没有严格解,需依靠数值计算得到。

物质在外磁场H中的磁场强度M为

(1)抗磁体,χ<0,数值很小且是常数,不随温度变化;

(2)顺磁体,χ>0,数值很小且随温度反比或与温度无关;

(3)铁磁体,在一定相变温度Tc(Curie温度)之下,M不随H作线性变化,具有磁滞回线是磁体物质的在磁场中行为的基本特性,磁化率与外磁场有关。

在Tc之上时,铁磁性消失,转变为顺磁性。

(4)反铁磁体,温度在Tc之上时是顺磁体,之下时χ随温度下降而降低。

对于二维Ising模型,令:

G=Ld为一个d维、共有N个格点的体系,在每个格点i上有一个自旋,可以朝上或朝下的方向。

用自旋变量σi表示,

在外磁场H中,体系的哈密顿量为:

,其中J为交换关联系数,μB表示单个自旋的磁矩,表示只对格点i周围最邻近的给点j求和。

J为正时为铁磁体的模型,各个自旋倾向于同向排列;

J为负时为反磁体的模型,各个自旋倾向于反向排列。

2.模拟二维Ising模型的步骤:

为了方便,令

为1。

(1)选择任意一个初始位形X{x1,x2,…xN};

(2)按1/N等概率的选取一个格点i,将其自旋反向,得到一个

新的位形X’{x1,x2,…xN};

(3)利用公式,计算能量差△E=E(X’)-E(X),若△E<0,则改变有效,位形改变X→X’;

(4)如果△E>0,则再产生一个[0,1]之间的随机数ξ,如果;则位形改变有效,否则位形不变;

(5)返回步骤

(2),进行下一次迭代。

(Ⅰ)固定外加磁场,磁化强度随温度的变化

①源程序

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

constdoublepi=3.1415926;

constdoubleem=1.0e-12;

doublerandx,randnum;

unsignedlongrandxi=1;

constunsignedlongranda=16807;

unsignedlongrandm=2147483637;

//randomnumbercreation***********************

voidrandom_number()

{

if(randxi==randm)

{

randxi=randm-1;

}

randxi=(randa*randxi)%randm;

randx=randxi;

randnum=randx/randm;

return;

}

//endrandom_number*****************************

//main*****************************************

intmain(void)

{

FILE*fp8;

fp8=fopen("固定外加磁场,随温度.txt","w+");

constintlenx=100,leny=lenx;

intspin[lenx][leny],im[lenx],ip[lenx];

doublemag0=0.0,mag=0.0;

doubleenj=0.5,magmax=0.0;

doubletemp=0.0,den=0.0,trapro=0.0;

intl=0,mcsi=0,mcsmax=0;

inti=0,j=0,ix=0,iy=0,iz=0,kx=0,ky=0,kz=0,t=0;

intdspin=0,imx=0,ipx=0,imy=0,ipy=0;

doubleH=0.0;

for(i=0;i

{

im[i]=i-1;

ip[i]=i+1;

}

im[0]=lenx;

ip[lenx-1]=0;

//设置边界条件

mag0=lenx*leny;

magmax=abs(mag0);//磁矩最大绝对值

cout<

cin>>H;

mcsmax=pow(10,5);

for(i=1;i<=100;i=i+1)

{

temp=temp+0.1;

mag=mag0;

for(ix=0;ix

{

for(iy=0;iy

{

spin[ix][iy]=1;//初始状态,设置所有初始磁矩为1

}

}

for(mcsi=0;mcsi

{

random_number();

kx=int(lenx*randnum);

random_number();

ky=int(leny*randnum);

imx=im[kx];

ipx=ip[kx];

imy=im[ky];

ipy=ip[ky];

dspin=spin[imx][ky]+spin[ipx][ky]+spin[kx][imy]+spin[kx][ipy];//对格点(ix,iy)周围最近邻的磁矩求和

den=2.0*enj*spin[kx][ky]*dspin+2*H*spin[kx][ky];//能量变化,由于磁矩从-1到1或1到-1,所以乘系数2

trapro=exp(-den/temp);

random_number();

if(den<=0||randnum<=trapro)

{

mag=mag-2.0*spin[kx][ky];//磁矩的变化

spin[kx][ky]=-spin[kx][ky];//自旋反转

}

else

{

gotolabel1;

}

label1:

continue;

}

fprintf(fp8,"%15.6f%15.6f\n",\

temp,mag/magmax);

}

cout<

gotolabelout;

labelout:

return0;

}

//endmain*************************************

②计算结果及具体分析讨论

取关联系数为0.5,外加磁场分别取0.5,1.0,1.5,得到磁化强度随温度的变化关系如下图:

外加磁场

由图可得,在不同的外加磁场下,随着温度的增加,磁化强度降低,这应该是温度增加导致的电子的热运动增加,电子运动变得更加无序,所以磁矩变小。

(Ⅱ)固定温度,磁化强度随外加磁场的变化

①源程序

#include

#include

#include

#include

#include

#include

#include

#include

usingnamespacestd;

constdoublepi=3.1415926;

constdoubleem=1.0e-12;

doublerandx,randnum;

unsignedlongrandxi=1;

constunsignedlongranda=16807;

unsignedlongrandm=2147483637;

//randomnumbercreation***********************

voidrandom_number()

{

if(randxi==randm)

{

randxi=randm-1;

}

randxi=(randa*randxi)%randm;

randx=randxi;

randnum=randx/randm;

return;

}

//endrandom_number*****************************

//main*****************************************

intmain(void)

{

FILE*fp8;

fp8=fopen("固定温度,随外加磁场.txt","w+");

constintlenx=100,leny=lenx;

intspin[lenx][leny],im[lenx],ip[lenx];

doublemag0=0.0,mag=0.0;

doubleenj=0.9,magmax=0.0;

doubletemp=0.0,den=0.0,trapro=0.0;

intl=0,mcsi=0,mcsmax=0;

inti=0,j=0,ix=0,iy=0,iz=0,kx=0,ky=0,kz=0,t=0;

intdspin=0,imx=0,ipx=0,imy=0,ipy=0;

doubleh=-10;

for(ix=0;ix

{

for(iy=0;iy

{

spin[ix][iy]=1;//初始状态,设置所有初始磁矩为1

}

}

for(i=0;i

{

im[i]=i-1;

ip[i]=i+1;

}

im[0]=lenx;

ip[lenx-1]=0;

mag0=lenx*leny;

magmax=abs(mag0);

mag=mag0;

cout<

cin>>temp;

mcsmax=pow(10,5);

 

for(i=1;i<=2000;i=i+1)

{

t=t+1;

if(t<=1000)

{

h=h+0.02;//磁场从-10增加到10

}

else

{

h=h-0.02;

}//磁场从10减少到-10

for(mcsi=0;mcsi

{

random_number();

kx=int(lenx*randnum);

random_number();

ky=int(leny*randnum);

imx=im[kx];

ipx=ip[kx];

imy=im[ky];

ipy=ip[ky];

dspin=spin[imx][ky]+spin[ipx][ky]+spin[kx][imy]+spin[kx][ipy];//对格点(ix,iy)周围最近邻的磁矩求和

den=2.0*enj*spin[kx][ky]*dspin+2*h*spin[kx][ky];//能量变化,由于磁矩从-1到1或1到-1,所以乘系数2

trapro=exp(-den/temp);

random_number();

if(den<=0||randnum<=trapro)

{

mag=mag-2.0*spin[kx][ky];//磁矩的变化

spin[kx][ky]=-spin[kx][ky];//自旋反转

}

else

{

gotolabel1;

}

label1:

continue;

}

fprintf(fp8,"%15.6f%15.6f\n",\

h,mag/magmax);

}

cout<

gotolabelout;

labelout:

return0;

}

//endmain*************************************

②计算结果及具体分析讨论

取关联系数为0.9,画出温度分别为0.25,0.5时的磁化强度随外加磁场的变化关系,如下图:

温度越低,磁滞回线的面积越大,低温时磁矩更大,所以矫顽力更大,导致磁滞回线面积更大。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 广告传媒

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2