我试图使用两个“do”循环来创建一个数组。但是,在某些情况下,我创建数组的方式显示了标题中提到的错误。请您指出问题所在。我对Fortran很陌生。
下面是代码:
program energy
integer::Nx=100,Ny=10
real::kx(101),Epos(101),Eneg(101),E0=0.12,ts=0.2,tsp=2.0,ky(11),Es,Ep
Es=-(E0-4.0*ts)
Ep=(Eo-4.0*ts)
kx(1)=-0.50
do i=1,Nx
kx(i+1)=kx(1)+i*(1.00/Nx)
end do
ky(1)=-0.50
do j=1,Ny
ky(j+1)=ky(1)+j*(1.00/Ny)
end do
do j=1,11
do i=1,101“错误将下面的行作为它的源。”
Epos(i,j)=sqrt(-Es*(Ep+2*ts*(cos(kx(i))+cos(ky(j)))) &
-(2*ts*(cos(kx(i))+cos(ky(j)))*(Ep-2*ts*(cos(kx(i))+cos(ky(j))))) &
+(4*tsp**2)*((sin(kx(i)))**2 +(sin(ky(j)))**2))
end do
end do
open(unit=1, file='data.dat')
do i=1,101
write(1,*) kx(i), Epos(i,1)
end do
close(unit=1)
end program energy另外,如何在保持j或'ky‘作为参数的同时,将Epos(i,j)与Kx(i)进行比较?
发布于 2014-10-12 19:15:06
对于您问题的秩不匹配部分:Epos被声明为一维数组。
real::Epos(101)你需要的是一个二维数组!从您的代码中,我认为应该是
real::Epos(101,11)对于绘图部分,我建议将结果写入ASCII文件(如果数据量不太大),然后使用一个外部工具,如GNUPLOT、Python或Octave/Matlab来绘制数据。
https://stackoverflow.com/questions/26328550
复制相似问题