fortran - Fortran中maxloc的类型冲突
问题描述
我有以下 Fortran 程序
PROGRAM main
IMPLICIT NONE
INTEGER :: i
INTEGER,dimension(:),allocatable :: x0
allocate(x0(1:25))
DO i=1,25
x0(i)=i
END DO
print*,"maxloc de x0 est 25, en effet",maxloc(x0)
print*,"Cinq fois maxloc(x0)",INT(maxloc(x0))
print*,"f applique a la fonction",f(maxloc(x0))
print*,"f1 applique a la fonction",f1(INT(maxloc(x0)))
CONTAINS
FUNCTION f(maxlocec)
IMPLICIT NONE
!Entrées
INTEGER,dimension(1) :: maxlocec
!Sorties
INTEGER,dimension(1) :: f
f=maxlocec**2
END FUNCTION f
FUNCTION f1(maxlocec)
IMPLICIT NONE
!Entrées
INTEGER :: maxlocec
!Sorties
INTEGER :: f1
f1=maxlocec**2
END FUNCTION f1
END PROGRAM
当我执行它时,我收到以下错误消息:
print*,"f1 applique a la fonction",f1(INT(maxloc(x0)))
1
Error: Rank mismatch in argument 'maxlocec' at (1) (0 and 1)
我已经尝试过f1(maxloc(x0))
,但它不起作用,所以我认为f1(INT(maxloc(x0)))
会起作用,但事实并非如此。
的输出maxloc
似乎是一个整数,但不是。解决它的方法是什么?
解决方案
maxloc 例程不返回标量整数,但在这种情况下,返回大小为 1 的一维整数数组。来自标准:
MAXLOC (ARRAY, DIM [, MASK, KIND, BACK]) 或 MAXLOC (ARRAY [, MASK, KIND, BACK])
...
结果特征。整数。如果存在 KIND,则 kind 类型参数由 KIND 的值指定;否则 kind 类型参数是默认整数类型。如果 DIM 没有出现,则结果是一个秩为 1 且大小等于 ARRAY 秩的数组;否则,结果的秩为 n - 1,形状为 [d1, d2, . . . , dDIM-1, dDIM+1, . . . , dn], 其中 [d1, d2, . . . , dn] 是 ARRAY 的形状。
所以在你的情况下,你可能需要:
print*,"f1 applique a la fonction",f1(maxloc(x0,1))
推荐阅读
- laravel - Laravel TrustProxies 无法获取 Throttle 的真实 IP
- python - 我怎样才能使它只有具有特定角色的成员才能执行命令?
- linux - FirebaseAdmin 无法建立 SSL 连接
- discord - Puppeteer + Discord.js 与自动邀请命令有关的问题
- solver - GAMS 会优化 Solver 的默认参数吗?
- python - 单击按钮并保持按下状态时,Tkinter 崩溃
- java - 无法在android中从一项活动转到另一项活动
- steam - 使用 steamworks API 获取我已发布产品的愿望清单数量
- python - 如何为将字符串错误显示为参数的查询制作重试装饰器
- javascript - 接受除表情符号外的外来字符的正则表达式