fortran中解决MINLOC报error FOR2614: assignment between arrays of differing rank
今天老五跟让我帮他看一个问题,说是在使用minloc函数的时候总是报error FOR2614: assignment between arrays of differing rank
这个错误,而且找的别人的代码几乎一模一样就是不报错,先看一下不报错的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
INTEGER, DIMENSION (6) :: A,B INTEGER, DIMENSION(1) :: AD1, AD2 !! NOTE:: must be dimensioned.. DATA A / -10, 75, 0, 99, -97, 70 / DATA B/1,2,3,4,5,6/ AD1 = MAXLOC(ARRAY=A) AD2 = MINLOC(ARRAY=A) print*,AD1+AD2 PRINT*, A,ad1,ad2 PRINT*, 'MAXLOC(ARRAY=A)=',AD1,' ::',A(AD1),B(AD1) PRINT*, 'MINLOC(ARRAY=A)=',AD2,' ::',A(AD2) AD1 = MAXLOC(ARRAY=A(1:3)) AD2 = MINLOC(ARRAY=A(4:6)) PRINT*, 'MAXLOC(ARRAY=A(1:3))=',AD1,' ::',A(AD1) PRINT*, 'MINLOC(ARRAY=A(4:6))=',AD2,' ::',A(AD2+3) AD1=MAXLOC(A, A.LT. 75) AD2=MINLOC(A, A.GT. 0) PRINT*,'MAXLOC(A, A.LT. 75)=', AD1,' ::',A(AD1) PRINT*,'MINLOC(A, A.GT. 0)=',AD2,' ::',A(AD2) END |
下面是报错的代码(去掉了不相关的部分)
1 2 3 4 5 6 7 8 9 10 |
program main implicit none real k ... integer,dimension(1)::pois INTEGER,PARAMETER::RAW=94185 REAL LAI(RAW) ...... pois=minloc(array=minus) k=LAI(pois) |
可以看出在变量的定义上是没什么区别的,也注意了这个函数的返回结果需要用一个长度为1的整型数组来接收,那到底是哪里出了问题呢?
这个问题看上去其实很好回答,因为他在k=LAI(pois)这句话中直接传入了pois,而这是一个数组,所以改成pois(1)就对了。
可是发现第一段代码里面也是直接传入的数组,其实就是数组第一个元素的位置,但是却是可以运行的,这是为啥?
的确是个很奇怪的问题,可能是对fortran数组理解的还不够深入,尝试着把”k=”改成”print*,”之后也可以正常运行了。
至于为啥会这样目前还不清楚,需要进一步找资料。