Fortran "Error: Incompatible ranks 0 and 1 in assignment"

标签 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 有建议吗?

最佳答案

实际上,这与长度不一致有关,而是与排名不一致有关,正如错误消息所示。

Prism_r(i,pp) 是数组的单个元素:它是一个标量,即等级 0。

(/r1(pp),r2(pp),r3(pp),r4(pp)/) 是一个 1 阶数组(长度为 4)。

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

关于Fortran "Error: Incompatible ranks 0 and 1 in assignment",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22186358/

相关文章:

c - 混合编程 : Calling FORTRAN from C

arrays - 在矩阵中减去或添加向量

algorithm - 搜索质数

fortran - gfortran 关联错误的类型绑定(bind)过程

arrays - 指向不连续数组部分的指针数组

c++ - Fortran、ISO C 绑定(bind)和 std::string

fortran - 逐元素矩阵乘法的并行化

fortran - Autotools 和 Fortran 模块

fortran - 从外部检查子程序中局部变量的值

multithreading - OpenMP:增加线程数时的明显竞争状态