gpt4 book ai didi

fortran - 如果我将分配的数组传递给尺寸不匹配的子例程,如何让 Fortran 警告我?

转载 作者:行者123 更新时间:2023-12-01 13:23:27 26 4
gpt4 key购买 nike

我只是花了太多时间来解决我程序中的错误。我调用一个子程序(让我们调用 mysub)定义为:

subroutine mysub(hourval,dayval,some,more,args)
use globals
implicit none

real:: hourval(24,ncol,nrow)
real:: dayval(ncol,nrow)

...
end

其中 hourvaldayval 是包含子程序中计算输出的数组,nrowncol 是整数。

调用子程序的样子

call mysub(daygrid,hourgrid,some,more,args)

其中 daygridhourgrid 是之前被allocated 的数组。 hourgrid 有 3 个维度 (24,ncol,nrow),而 daygrid 有 2 个维度 (ncol,nrow) .到目前为止提到的所有变量(hourgriddaygridnrowncol)都在模块 中声明全局变量

我不断得到奇怪的结果,最后注意到我在我的子例程调用中调换了 hourgriddaygrid 的顺序,改变这个解决了我的问题(实际变量在我的程序名称不太明确,这使得错误更难发现)。但是,该程序可以正常编译,并且我不会在日志文件中收到任何相关的错误消息。

因此,我想知道是否有一种方法可以在编译时或运行时获取指向该错误的消息。我在 Linux 上使用具有以下编译器标志的 Intel Fortran 11.1:

-O3 -C -pg -traceback -g

我实际上指望 -C 标志(相当于 -check all)来检测这种错误,因为它暗示了选项 -check界限。还有什么我可以做的吗?

最佳答案

你可能想使用假设形状的虚拟参数来捕获像这样的错误(即 real, dimension(:,:)::dayvalreal, dimension(:,:,: )::小时数。)

摘自 Metcalf、Cohen 和 Reid(2011 年)的现代 Fortran 解释:

Shape, or character disagreement cannot occur when a dummy argument is assumed-shape.

此外,通过 use 语句将已经可用的变量作为实际参数传递给同一子例程,这并不是最令人惊奇的编码风格。

关于fortran - 如果我将分配的数组传递给尺寸不匹配的子例程,如何让 Fortran 警告我?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23014145/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com