program main1
parameter(n=50)
integer i,j
common a(n,n)
real t,m,z
// 设置输出文件
open(1,file='out.dat')
// 初始化Ising格点,均赋值为1
do 10 i=1,n
do 20 j=1,n
a(i,j)=1
20 continue
10 continue
// 体系按温度改变(0.1~4.0)进行Monte Carlo模拟
do 30 t=0.1,4.0,0.1
// 体系的预热阶段,在此期间不采样
do 40,i=1,5000
call abc(t) // 调用metropolis算法子例程
40 continue
// 预热结束,可以对体系进行采样了
m = 0.0
do 50,k=1,1000
call abc(t)
if(mod(k,5).eq.0) then
z=0.0
do 60,i=1,n
do 70,j=1,n
z=z+a(i,j)
70 continue
60 continue
m=m+z/(n*n) // 计算体系的磁化强度M
end if
50 continue
m=m/200
write(1,200)t,m // 记录M随着T的变化曲线,向文件输出
write(*,200)t,m // 向屏幕输出
30 continue
200 format(2x,f6.4,8x,f10.6)
close(1)
end
//实现Metropolis算法
subroutine abc(t)
parameter(n=50)
common a(n,n)
do 10,i=1,n
do 20,j=1,n
// x1, x2, x3, x4 是当前格点(i,j)的四个近邻
x1=a(i+1,j)
x2=a(i,j+1)
x3=a(i-1,j)
x4=a(i,j-1)
if(i.eq.1) x3=a(n,j)
if(i.eq.n) x1=a(1,j)
if(j.eq.1) x4=a(i,n)
if(j.eq.n) x2=a(i,1)
// h表示体系尝试翻转前后的Hamiltonian(能量)变化
h=2*a(i,j)*(x1+x2+x3+x4)
w=exp(-h/t)
b=rand()
//按Metropolis规则,判断是否接受当前格点的尝试翻转
if(w.gt.b) a(i,j)=-a(i,j)
20 continue
10 continue
end
// 产生0~1均匀分布的随机数
function rand()
real rand
integer seed,c1,c2,c3
parameter(c1=29,c2=217,c3=1024)
data seed/0/
seed=mod(seed*c1+c2,c3)
rand=real(seed)/c3
end
DSP(digital singnal processor)是一种独特的微处理器,是以数字信号来处理大量信息的器件。其工作原理是接收模拟信号,转换为0或1的数字信号,再对数字信号进行修改、删除、强化,并在其他系统芯片中把数字数据解译回模拟数据或实际环境格式。它不仅具有可编程性,而且其实时运行速度可达每秒数以千万条复杂指令程序,源源超过通用微处理器,是数字化电子世界中日益重要的电脑芯片。它的强大数据处理能力和高运行速度,是最值得称道的两大特色。DSP芯片,也称数字信号处理器,是一种特别适合于进行数字信号处理运算的微处理器具,其主机应用是实时快速地实现各种数字信号处理算法。根据数字信号处理的要求,DSP芯片一般具有如下主要特点:
(1)在一个指令周期内可完成一次乘法和一次加法;
(2)程序和数据空间分开,可以同时访问指令和数据;
(3)片内具有快速RAM,通常可通过独立的数据总线在两块中同时访问;
(4)具有低开销或无开销循环及跳转的硬件支持;
(5)快速的中断处理和硬件I/O支持;
(6)具有在单周期内 *** 作的多个硬件地址产生器;
(7)可以并行执行多个 *** 作;
(8)支持流水线 *** 作,使取指、译码和执行等 *** 作可以重叠执行。
当然,与通用微处理器相比,DSP芯片的其他通用功能相对较弱些。
其中:alaising是全屏反锯齿的意思!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)