小编m.c*_*ips的帖子

如果我将已分配的数组传递给具有不匹配维度的子例程,如何让Fortran警告我?

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

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

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

...
end
Run Code Online (Sandbox Code Playgroud)

where hourvaldayval是包含子例程中计算输出的数组,nrow并且ncol是整数.

对子程序的调用看起来像

call mysub(daygrid,hourgrid,some,more,args)
Run Code Online (Sandbox Code Playgroud)

以前是哪个daygridhourgrid是数组allocate.hourgrid有3个尺寸(24,ncol,nrow),daygrid有2个尺寸(ncol,nrow).提及到现在为止(所有变量hourgrid,daygrid,nrow,ncol)在模块中声明globals.

我一直得到奇怪的结果,最后发现,我切换的顺序hourgriddaygrid我的子程序调用中,并改变这个解决我的问题(我在程序的实际变量有不太明显的名称,其所犯的错误有点难以辨认).但是,程序将正常编译,我不会在日志文件中收到任何相关的错误消息.

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

-O3 -C -pg -traceback -g
Run Code Online (Sandbox Code Playgroud)

我实际上指望-C标志(相当于-check all)来检测这种错误,因为它意味着选项-check bounds.还有什么我可以做的吗?

fortran

2
推荐指数
1
解决办法
320
查看次数

标签 统计

fortran ×1