use*_*598 2 time fortran naming function
我需要计时例程,我想要挂钟时间,所以我正在使用time()例程.但是,我的代码已经有一个名为time的2D数组,所以当我这样做时:startt = time()它认为我指的是数组.如何在不更改阵列名称的情况下解决此问题?
我试图在我的主程序之外创建一个函数来绕过它,但它不起作用:
program timetest
real time(0:10,0:10) ! dummy array to demonstrate problem
integer*8 startt,endt,tdif
time=0 ! initialize dummy array to 0
startt=gettime()
call sleep(2) !stuff to be timed
endt=gettime()
tdif=endt-startt
print*,"tdif= ",tdif
end
integer*8 function gettime()
gettime=time()
print*,"gettime= ",gettime
end function
Run Code Online (Sandbox Code Playgroud)
输出:
gettime = 0
gettime = -9223372036854775808
tdif = 0
在程序单元中,您不能使用相同的名称显示两个不同的内容.我给你的第一个建议是使用Fortran标准内在子程序SYSTEM_CLOCK而不是time().
如果在调用者中使用正确的数据类型声明了gettime,则使用单独例程的方法应该有效.如你所知,gettime在主程序中是整数(4),而在函数本身中是整数(8).这些需要匹配.