2012-01-05 9 views
1

このコードで助けを要求しています: エラー:(1)(2/1)の配列参照のランクミスマッチ。そして、私の目的は、立方体(p = i +(j-1)* N +(k-1)* N * N)内の各点を通過し、各軸に沿った電位の勾配(gradphi_x、gradphi_y、gradphi_z )。エラー:配列参照のランクミスマッチが(1)(2/1)

PROGRAM sub_rho_phi 
    integer, parameter:: N=3 
    real, dimension(N):: gradphi_x, gradphi_y, gradphi_z 
    call output(gradphi_x, gradphi_y, gradphi_z) 
    open(unit=1,file="grad_phi.dat") 

    l = 0 
    do 
     l=l+1 
     write(1,*) gradphi_x(l),gradphi_y(l),gradphi_z(l) 
     if (l == N**3) then 
      exit 
     end if 
    end do 
END 


SUBROUTINE output(gradphi_x, gradphi_y, gradphi_z) 
    real, parameter:: h=0.7,G=6.67,M=1.98892*(10**3)!!in(10**15) kg 

    integer, parameter:: N=3 
    real, dimension(N):: r, gradphi_x,gradphi_y,gradphi_z 
    integer, dimension(N**3):: x,y,z 
    integer:: p 
    real:: a 
    a=500/h !in kpc 

    do i=0, N 
     do j=0, N 
      do k=0, N 
       p = i+(j-1)*N + (k-1)*N*N 
       x(p,1)=i 
       y(p,2)=j 
       z(p,3)=k 
       r(p)=sqrt(x(p,1)*x(p,1)+y(p,2)*y(p,2)+z(p,3)*z(p,3)) 
       gradphi_x(p)=(G*M)*x(p,1)/r(p)*(r(p)+a)**2 
       gradphi_y(p)=(G*M)*y(p,2)/r(p)*(r(p)+a)**2 
       gradphi_z(p)=(G*M)*z(p,3)/r(p)*(r(p)+a)**2 
      enddo 
     enddo 
    enddo 

    return 
END 

答えて

7

あなたは1次元配列としてxyzを宣言しましたが、outputを介して2つの次元のインデックスのすべての方法を使用しています。

+0

@ talonmies非常に、ヘルプ整数、次元(N ** 3,3):: x 整数、次元(N ** 3,3):: y 整数、次元(N ** 3,3):: z 実行されますが、新しい種類のエラーが発生します。不正な命令。私はこれを修正するために取り組んでいます。乾杯! – user1132506