版块导航
正在加载中...
客户端APP下载
论文辅导
申博辅导
登录
注册
帖子
帖子
用户
本版
应《网络安全法》要求,自2017年10月1日起,未进行实名认证将不得使用互联网跟帖服务。为保障您的帐号能够正常使用,请尽快对帐号进行手机号验证,感谢您的理解与支持!
24小时热门版块排行榜
>
论坛更新日志
(1043)
>
虫友互识
(69)
>
休闲灌水
(46)
>
论文投稿
(38)
>
博后之家
(33)
>
导师招生
(25)
>
考博
(25)
>
硕博家园
(23)
>
基金申请
(19)
>
教师之家
(19)
>
公派出国
(19)
>
考研
(12)
>
论文道贺祈福
(8)
>
找工作
(5)
>
招聘信息布告栏
(4)
>
留学生活
(4)
小木虫论坛-学术科研互动平台
»
计算模拟区
»
分子模拟
»
Monte Carlo
»
【转帖】2维无外场Ising模型的Monte Carlo模拟的C++实现
2
1/1
返回列表
查看: 2694 | 回复: 7
查看全部回帖
@他人
存档
新回复提醒
(忽略)
收藏
在APP中查看
【奖励】
本帖被评价4次,作者zyj8119增加金币
3
个
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖
zyj8119
木虫
(著名写手)
模拟EPI: 10
应助: 65
(初中生)
贵宾: 0.003
金币: 915.1
帖子: 2936
在线: 1329.4小时
虫号: 664177
[
资源
]
【转帖】2维无外场Ising模型的Monte Carlo模拟的C++实现
CODE:
// Copyright(c)2010 Ma Chengzhang
#include
#include
#include
//tr1随机数调用
#include
//设置随机数种子用
#include
using namespace std; //cout,endl等简单语句必须
using namespace std::tr1; //tr1随机数调用
inline unsigned __int64 ReadTSC()//为取到精确的随机数种子,嵌入汇编程序取系统时钟
{
__asm _emit 0x0F
__asm _emit 0x31
}
double totalE(vector
>& SpinGrid,int GridL,double JBound)
{
int nn_count = 0;//最近邻计数
// 每个格点只考虑右键和上键
for(int i=0; i
{
for(int j=0; j
{
if(SpinGrid[i][j]==SpinGrid[i+1][j]) // 考虑右键
nn_count++;
else
nn_count--;
if(SpinGrid[i][j]==SpinGrid[i][j+1]) // 考虑上键
nn_count++;
else
nn_count--;
}
}
//周期性边界情况
for(int i=0; i
{
if(SpinGrid[i][GridL-1]==SpinGrid[i+1][GridL-1]) // 右键
nn_count++;
else
nn_count--;
if(SpinGrid[i][GridL-1]==SpinGrid[i][0]) // 上键
nn_count++;
else
nn_count--;
}
for(int j=0; j
{
if(SpinGrid[GridL-1][j]==SpinGrid[0][j]) // 右键
nn_count++;
else
nn_count--;
if(SpinGrid[GridL-1][j]==SpinGrid[GridL-1][j+1]) // 上键
nn_count++;
else
nn_count--;
}
//右上顶点
if(SpinGrid[GridL-1][GridL-1]==SpinGrid[0][GridL-1]) // 右键
nn_count++;
else
nn_count--;
if(SpinGrid[GridL-1][GridL-1]==SpinGrid[GridL-1][0]) // 上键
nn_count++;
else
nn_count--;
return -JBound*nn_count;
}
void main()
{
//物理常数定义
double kB=1.0; //Boltzmann常数
double JBound=0.5; //交换作用系数
int GridL=20; //网格大小,长宽一样,即 GridL x GridL 网格
mt19937 RandEngine; //Mersenne Twister算法随机数生成器,核心引擎类
unsigned long RandSeed = (unsigned long)ReadTSC(); //用 CPU 时钟作为随机数种子
RandEngine.seed(RandSeed);
uniform_int
RandInt(0, GridL-1);//产生0到GridL-1之间的随机整数,
// 含0和GridL-1,即[0,GridL-1]而不是(0,GridL-1)
uniform_real
RandFloat(0,1); //产生0到1之间的随机数
double MaxTemp=5.00; //要模拟的最高温度,温度以J/kB为单位,kB是波尔兹曼常数
double MinTemp=0.1; //要模拟的最低温度,温度以J/kB为单位,kB是波尔兹曼常数
unsigned int BeforeEquilSteps=10000; //在达到平衡前要演化的步数
unsigned int TotalSteps=BeforeEquilSteps+10000; //每温度要演化的总步数,包含前面的BeforeEquilSteps
int DiscardedSteps=50; //达到平衡态后,为实现无偏统计抽样,每DiscardedSteps演化步数才统计一次
double TempInterval=0.1; //扫描温度间隔,温度以J/kB为单位,kB是波尔兹曼常数
double beta; //当前beta=1/(kB*T)
vector< vector
> SpinGrid(GridL, vector
(GridL,-1)); //网格定义,格点初始值都取-1
//统计量定义
double TotalEnergy=0; //网格总能量
double persiteEnergy=0; //每格点能量
double persiteAveEnergy=0; //每格点平均能量
ofstream fileout("Ising2D.dat");
//Monte Carlo 部分
for(double CurrentTemp=MinTemp;CurrentTemp
{
int count=0; //此变量记录达到平衡后演化步数,每当count达到DiscardedSteps时归零
int Outcount=0; //记录累计统计次数
int left,right,bottom,top; //辅助变量
beta=1/(kB*CurrentTemp);
for(unsigned int mcStep=0;mcStep
{
//随机选择格点反转自旋,随机数算法取自:C++ tr1 Mersenne Twister算法
int i=RandInt(RandEngine); //第i列
int j=RandInt(RandEngine); //第j行
//采用周期性边界条件
if(i!=0)
left = SpinGrid[i-1][j];
else
left = SpinGrid[GridL-1][j];
if(i!=GridL-1)
right = SpinGrid[i+1][j];
else
right = SpinGrid[0][j];
if(j!=0)
bottom = SpinGrid[i][j-1];
else
bottom = SpinGrid[i][GridL-1];
if(j!=GridL-1)
top = SpinGrid[i][j+1];
else
top = SpinGrid[i][0];
int spinSum=top+bottom+left+right;
//double oldEnergy=-JBound*SpinGrid[i][j]*spinSum;
//double newEnergy=-oldEnergy;
double EDiff=2*JBound*SpinGrid[i][j]*spinSum;//EDiff=newEnergy-oldEnergy
//cout<<"EDiff="<
//判断是否反转自旋
if( EDiff<0)
SpinGrid[i][j]=-SpinGrid[i][j];
else
{
if(RandFloat(RandEngine)
SpinGrid[i][j]=-SpinGrid[i][j];
}
//如果mcStep达到了指定步数,就认为达到了平衡态,可以进行状态分析了
//但是只是每隔DiscardedSteps步数才分析一次
if(mcStep>BeforeEquilSteps)
{
count=count+1;
if(count==DiscardedSteps)
{
count=0; //count归零,重新开始计数
TotalEnergy=totalE(SpinGrid,GridL,JBound);
persiteEnergy=TotalEnergy/(GridL*GridL);
persiteAveEnergy=(persiteAveEnergy*Outcount+persiteEnergy)/(Outcount+1);
Outcount++;
}
}
}
//输出数据到数据文件
fileout<< CurrentTemp <<" "<
//统计量归零
persiteAveEnergy=0;
Outcount=0;
}
//Monte Carlo 部分结束
fileout.close();
////输出测试
////测试随机整数
//for(int i = 0; i < 50; ++i) //产生均匀分布的在0到19之间的50个整数随机数
//{
// std::cout << RandInt(RandEngine) << endl;
//}
//cout<<"*************"<
//for(int i = 0; i < 50; ++i) //产生均匀分布的在0到1之间的50个随机数
//{
// std::cout << RandFloat(RandEngine) << endl;
//}
////测试随机整数毕
//cout<
//cout<<"TotalSteps = "<
//cout<<"RandSeed = "<
///////////////////////////////////////////////////////////////////////
cout<
char c;
cin>>c;
}
下面是用Mathematica处理数据的结果:
[
Last edited by zyj8119 on 2010-9-10 at 17:51
]
回复此楼
» 收录本帖的淘帖专辑推荐
资源收集
graphene
学习
量子蒙特卡洛模拟
» 猜你喜欢
请问有评职称,把科研教学业绩算分排序的高校吗
已经有6人回复
2025冷门绝学什么时候出结果
已经有6人回复
Bioresource Technology期刊,第一次返修的时候被退回好几次了
已经有7人回复
真诚求助:手里的省社科项目结项要求主持人一篇中文核心,有什么渠道能发核心吗
已经有8人回复
寻求一种能扛住强氧化性腐蚀性的容器密封件
已经有5人回复
请问哪里可以有青B申请的本子可以借鉴一下。
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
» 本主题相关价值贴推荐,对您同样有帮助:
泵站进水流道出口断面轴向流速分布不均匀度的求解方法
已经有4人回复
matlab解微分方程
已经有10人回复
模拟结果实验结果不一致
已经有11人回复
fluent中的体热源加载问题(实际上是热流密度,不是热生成率)
已经有19人回复
dynaform 软件模拟问题,三通管成形的冲头怎么设置
已经有5人回复
纤维素酸解的相关资料
已经有4人回复
C++编程,关于循环结构的,大家看看我这程序哪里错了?
已经有21人回复
Ansys Fluent的计算能力有多大(最多能计算多少网格?)
已经有18人回复
用DPM模型时,solution里面会不会有 discrece model方程
已经有4人回复
是什么原因导致纤维素的耐盐性不好?
已经有6人回复
Monte Carlo 模拟时图是用什么软件做的
已经有10人回复
【求助】用monte carlo法做分子模拟,用什么编程语言实现比较好?
已经有25人回复
【讨论】大家对未来GPU在monte carlo中的应用持有什么样的态度(CUDA)?
已经有15人回复
【求助】有用Monte Carlo 编过有关Fluid中粒子运动的程序
已经有6人回复
【求助】求Monte Carlo 关于扩散系数计算的源代码
已经有5人回复
【在线答疑】经典粒子体系的Monte Carlo 模拟之基础篇
已经有73人回复
1楼
2010-09-10 17:49:48
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
yaneehan2010
银虫
(正式写手)
应助: 8
(幼儿园)
金币: 548.9
帖子: 420
在线: 106.3小时
虫号: 1044536
★★★★★ 五星级,优秀推荐
你好,我是刚接触分子模拟的菜鸟,做的是气体分子扩散系数和分子间碰撞情况。我该怎么着手呢?不知道有没有类似的程序可以下载呢?在哪里可以下载的到呀,请指条明路,万分感谢、、
赞
一下
回复此楼
6楼
2012-05-23 00:43:45
已阅
回复此楼
关注TA
给TA发消息
送TA红花
TA的回帖
相关版块跳转
第一性原理
量子化学
计算模拟
分子模拟
仿真模拟
程序语言
我要订阅楼主
zyj8119
的主题更新
2
1/1
返回列表
☆ 无星级
★ 一星级
★★★ 三星级
★★★★★ 五星级
如果回帖内容含有宣传信息,请如实选中。否则帐号将被全论坛禁言
普通表情
龙
兔
虎
猫
高级回复
(可上传附件)
百度网盘
|
360云盘
|
千易网盘
|
华为网盘
在新窗口页面中打开自己喜欢的网盘网站,将文件上传后,然后将下载链接复制到帖子内容中就可以了。
信息提示
关闭
请填处理意见
关闭
确定