如何调试带有错误"Rank mismatch in array reference"的文件?



我试图使用两个"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)的关系图?

对于问题的秩不匹配部分:将Epos声明为一维数组

real::Epos(101)

你需要的是一个二维数组!根据你的代码,我想它应该看起来像

real::Epos(101,11)

对于绘图部分,我建议将结果写入ASCII文件(如果数据量不是太大),然后使用GNUPLOT、Python或Octave/Matlab等外部工具来绘制数据。

最新更新