错误无法分配给一个被命名的常数

时间:2016-01-21 12:27:08

标签: compiler-errors fortran

我在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语句是正确的,因为我在另一个程序中使用它并且它有效。

1 个答案:

答案 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键时,将编辑器设置为使用空格。