Fortran"错误:在任务中排名0和1不兼容"

时间:2014-03-05 00:53:21

标签: fortran

我正在使用地球物理数据编写线性逆程序。虽然我之前已经创建了与Fortran相关的地球物理问题的程序,但我还是刚开始使用Fortran进行编程。

我遇到错误:“错误:编译时,分配中的队列0和1不兼容”。我知道这与长度不一致有关,但我一直无法解决。我想用Prism_r(i,pp)的行分配先前计算的值,即r1-r4。错误如下:

Prism_r(i,pp)=(/ r1(pp),r2(pp),r3(pp),r4(pp) /)                 
    1
Error: Incompatible ranks 0 and 1 in assignment at (1) 

以下是相关代码:

real, dimension(0:P-1) :: r1, r2, r3, r4    
real, dimension(0:D-1,0:3) ::Prism_r, Prism_theta
.....
do i=0,D-1
    do pp=0,P-1
    r1(pp)=sqrt((x2+2*PP-0.2*i)**2+z1**2)
    r2(pp)=sqrt((x2+2*PP-0.2*i)**2+z2**2)
    r3(pp)=sqrt((x1+2*PP-0.2*i)**2+z2**2)
    r4(pp)=sqrt((x1+2*PP-0.2*i)**2+z1**2)
    Prism_r(i,pp)=(/ r1(pp),r2(pp),r3(pp),r4(pp) /)
    enddo  
enddo

当我评论Prism_r时,正在正确执行计算,但它不会为其赋值。有没有人建议我如何正确定义r1-r4,以便将它们的值分配给Prism_r?

1 个答案:

答案 0 :(得分:4)

它实际上并不与长度不一致有关,而是与排名不一致,正如错误信息所说的那样。

Prism_r(i,pp)是数组的单个元素:它是标量,即排名为0.

(/ r1(pp),r2(pp),r3(pp),r4(pp) /)是排名为1的数组(长度为4)。

在fortran中,您无法将数组分配给标量。