从 REFPROP FORTRAN 文件调用属性时的奇怪行为

Strange behavior while calling properties from REFPROP FORTRAN files

我正在尝试使用 REFPROPs HSFLSH 子例程来计算 steam 的属性。

当多次迭代计算出相同的状态属性时
(固定焓和熵 (Enthalpy = 50000 J/mol & Entropy = 125 J/mol),
在每第 4 次/第 5 次迭代后使用 HSFLSH 进行计算所花费的时间增加到大约 0.15 ms 而其他迭代的时间量可以忽略不计。这变成了问题,因为我的程序对这个子例程进行了数千次调用。从而导致异常庞大的程序 运行 次。

生成上述日志的程序在这里:

 C refprop check
       program time_check
       parameter(ncmax=20)
       dimension x(ncmax)
       real hkj,skj
       character hrf*3, herr*255
       character*255 hf(ncmax),hfmix
 C
 C     SETUP FOR WATER
 C
       nc=1                      !Number of components
       hf(1)='water.fld'      !Fluid name
       hfmix='hmx.bnc'           !Mixture file name
       hrf='DEF'                 !Reference state (DEF means default)
       call setup(nc,hf,hfmix,hrf,ierr,herr)
       if (ierr.ne.0) write (*,*) herr
       call INFO(1,wm,ttp,tnbp,tc,pc,dc,zc,acf,dip,rgas)
       write(*,*) 'Mol weight ', wm
       h = 50000.0
       s = 125.0
 c
 C
       DO I=1,NCMAX
       x(I) = 0
       END DO
 C ******************************************************
 C  THIS IS THE ACTUAL CALL PLACE
 C ******************************************************
       do I=1,100
       call cpu_time(tstrt)
       CALL HSFLSH(h,s,x,T_TEMP,P_TEMP,RHO_TEMP,dl,dv,xliq,xvap,
      &            WET_TEMP,e,
      &            cv,cp,VS_TEMP,ierr,herr)
       call cpu_time(tstop)
       write(*,*),I,'  time taken to run hsflsh routine= ',tstop - tstrt
       end do
       stop
       end

(当然你需要 FORTRAN 文件,不幸的是我不能分享,因为 REFPROP 不是开源的)
谁能帮我弄清楚为什么会这样。?

P.S : 上面的代码是使用 gfortran -fdefault-real-8

编译的

更新
我尝试按照下面@Ross 的建议使用 system_clock 来计算我的计算时间。结果在整个循环中是一致的(下图)。我想我将不得不找到其他方法来提高计算速度(叹息!)

我没有具体的答案,但如果所有调用真的花费了大约 3 毫秒,这种行为看起来就像我期望的那样,但是你对 CPU_TIME 的调用没有注册以下任何内容15 毫秒。您是否看到 any 输出的时间少于 10 毫秒?我特别感兴趣的是 return 非零时间的调用之间的间隔大致均匀 - 它大约在 5.

CPU 时机可能是一件棘手的事情。我在评论中推荐你试试system_clock,它可以比CPU_TIME精度更高。你说这行不通,但我不服气。您是否将长整数传递给 system_clock?您的系统的 count_rate 是什么?一直是 15 毫秒还是 0 毫秒?