我在Fortran中编写了一个非常简单的程序:
parameter(m_box=7) ! Number of urns (not a real parameter)
parameter(max_dens=4) ! Maximum density computed
parameter(beta=4.5)
real*8 p(0:m_box*max_dens),mbeta,xnorm
real*8 hist(0:m_box*(max_dens**2),0:(max_dens*m_box)**2)
real*8 Pi(0:(max_dens*m_box)**2)
integer sum2,sumq
n_balls=m_box*max_dens
n2_balls=m_box*(max_dens**2)
nq_balls=(m_box*max_dens)**2
n2half=(int(sqrt(n2_balls/2.))+1)**2 ! Valore massimo per il quale ho tutta la statistica
mbeta=-beta
freq=log(20.)
xnorm=0.
do n=0,n_balls
p(n)=(n+1.)**mbeta ! Urns
xnorm=xnorm+p(n)
enddo
do n=0,n_balls
p(n)=p(n)/xnorm
enddo
do i=0,n2_balls
do j=0,nq_balls
pi(i)=0
hist(i,j)=0
enddo
enddo
do n1=0,n_balls
do n2=0,n_balls
do n3=0,n_balls
do n4=0,n_balls
do n5=0,n_balls
do n6=0,n_balls
do n7=0,n_balls
sum2=n1**2+n2**2+n3**2+n4**2+n5**2+n6**2+n7**2
sumq=(n1+n2+n3+n4+n5+n6+n7)**2
if(sum2 .le. n2_balls .and. sumq .le. nq_balls)hist(sum2,sumq)=
& hist(sum2,sumq)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*
& p(n6)*p(n7)
if((sum2 .eq. n2half) .and. (sumq .eq. nq_balls))Pi(n1)=
& Pi(n1)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*
& p(n6)*p(n7)!*p(n8)*p(n9)*p(n10)
enddo
enddo
enddo
enddo
enddo
enddo
write(102,*)n1,Pi(n1)
enddo
sumhist=0
do i=0,n2_balls
do j=0,nq_nqballs
sumhist=sumhist+hist(i,j)
if(hist(i,j).ne.0)write(100,*)i,hist(i,j)
if(hist(i,j).ne.0)write(101,*)1.*i/m_box,-log(1d0*hist(i,j))/m_box
enddo
enddo
print*,'Normalizzazione della P = ',sumhist
end
当我编译时,我收到错误:
ERROR CANNOT ASSIGN TO A NAMED CONSTANT f:45:55.
我肯定犯了一个愚蠢的错误,但我无法看到。我很确定if语句是正确的,因为我在另一个程序中使用它并且它有效。
答案 0 :(得分:0)
您正在混合制表符和空格。你不能在Fortran中做到这一点,绝对不是固定形式的Fortran。这是将标签转换为空格后代码在我的编辑器中的样子:
do n1=0,n_balls
do n2=0,n_balls
do n3=0,n_balls
do n4=0,n_balls
do n5=0,n_balls
do n6=0,n_balls
do n7=0,n_balls
sum2=n1**2+n2**2+n3**2+n4**2+n5**2+n6**2+n7**2
sumq=(n1+n2+n3+n4+n5+n6+n7)**2
if(sum2 .le. n2_balls .and. sumq .le. nq_balls)hist(sum2,sumq)=
& hist(sum2,sumq)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*
& p(n6)*p(n7)
if((sum2 .eq. n2half) .and. (sumq .eq. nq_balls))Pi(n1)=
& Pi(n1)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*
& p(n6)*p(n7)!*p(n8)*p(n9)*p(n10)
enddo
enddo
您可以看到第一个&符号&
缩进错误!
您必须将所有标签转换为空格,不要再使用标签。您还必须修复缩进。几条线也可能变得太长,你必须打破它们。
当您按TAB键时,将编辑器设置为使用空格。