错误:(1)(2/1)处的数组引用中的排名不匹配 [英] Error: Rank mismatch in array reference at (1) (2/1)

查看:475
本文介绍了错误:(1)(2/1)处的数组引用中的排名不匹配的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

(p)我会请求你对这段代码的帮助:我一直在得到
错误:在(1)(2/1)数组引用中的排名不匹配。我的目标是通过立方体中的每个点(p = i +(j-1)* N +(k-1)* N * N)并计算沿每个轴的电势的梯度(gradphi_x,gradphi_y,gradphi_z )。

  PROGRAM sub_rho_phi 
integer,parameter :: N = 3
real,dimension(N) :: gradphi_x,gradphi_y,gradphi_z
调用输出(gradphi_x,gradphi_y,gradphi_z)
open(unit = 1,file =grad_phi.dat)

l = 0 $ b (1,*)gradphi_x(l),gradphi_y(l),gradphi_z(l)
if(l == N ** 3)then
l = l + 1

出口
结束如果
结束做
END


SUBROUTINE输出(gradphi_x,gradphi_y,gradphi_z)
实数,参数(10 ** 15)kg

整数,参数:: N = 3
(h = 0.7,G = 6.67,M = 1.98892 *实数,维数(N):: r,gradphi_x,gradphi_y,gradphi_z
整数,维数(N ** 3):: x,y,z
整数:: p
real :: a
a = 500 / h!in kpc

i = 0,N
do j = 0,N
do k = 0,N
p = i +(j-1)* N +(k-1)* N * N $ b (p,2)= j
z(p,3)= k
r(p)= sqrt(x(p,1)* x(p,1) (p,2)* y(p,2)+ z(p,3)* z(p,3))
gradphi_x(p)=(G * M)* x (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


x , y 和<$> c $ c> z 作为一维数组,但是通过输出完成二维索引。


I would kindly request your help on this code: I kept on getting Error: Rank mismatch in array reference at (1) (2/1). And my objective is to go through each point in a cube(p = i+(j-1)*N + (k-1)*N*N) and calculate the gradient of the potential along each axis(gradphi_x, gradphi_y, gradphi_z).

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

解决方案

You have declared x, y and z as one dimensional arrays, but are using two dimensional indexing all the way through output.

这篇关于错误:(1)(2/1)处的数组引用中的排名不匹配的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆