Я пытаюсь использовать подпрограмму REFPROPs HSFLSH
для вычисления свойств для пара.Странное поведение при вызове свойств из файлов REFPROP FORTRAN
Когда же состояние свойство вычисляется по множеству итераций
(фиксированная энтальпии и энтропии (Enthalpy = 50000 J/mol & Entropy = 125 J/mol)
,
время, необходимое для вычисления с помощью HSFLSH
после каждых 4-й/5-е итерации увеличивается до примерно 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 реальном 8
UPDATE
Я попытался с помощью system_clock
ко времени мои расчеты, как было предложено @Ross ниже. Результаты однородны по петле (изображение ниже). Я должен найти альтернативные пути для улучшения скорости вычислений я думаю (Вздох!)
Где находится 'implicit none'? Сделайте двойную точность 'tstart' и' tstop'. –
Я скомпилировал с помощью -fdefault-real-8, чтобы все было в двойной точности. (Обновлено также) –
Без других, способных воспроизвести это, я думаю, что кому-то будет трудно помочь. Вы пробовали связаться со службой поддержки программного обеспечения? Возможно, было бы полезно узнать, какую систему вы используете (например, сколько физических ядер доступно/используется, многопользовательская/однопользовательская машина и т. Д.). –