實現你問我發現我在程序中實現類似的功能,最近(提交https://bitbucket.org/LadaF/elmm/commits/f10a1b3421a3dd14fdcbe165aa70bf5c5001413f)之後。但我仍然需要手動設置時間限制。
最重要的部分:
time_stepping%clock_time_limit
是以秒爲單位的時間限制。計算系統時鐘週期數對應於:
call system_clock(count_rate = timer_rate)
call system_clock(count_max = timer_max_count)
timer_count_time_limit = int(min(time_stepping%clock_time_limit &
* real(timer_rate, knd), &
real(timer_max_count, knd) * 0.999_dbl) &
, dbl)
啓動定時器
call system_clock(count = time_steps_timer_count_start)
檢查計時器,如果時間到了
if (mod(time_step,time_stepping%check_period)==0) then
if (master) then
error_exit = time_steps_timer_count_2 - time_steps_timer_count_start > timer_count_time_limit
if (error_exit) write(*,*) "Maximum clock time exceeded."
end if
MPI_Bcast the error exit to other processes
if (error_exit) exit
end if
退出與
error_exit
集的主循環
.true.
現在,您可能想要自動從您的調度程序中獲取時間限制。這在不同的作業調度軟件之間會有所不同。將會有一個像$PBS_WALLTIME
這樣的環境變量。請參閱Get walltime in a PBS job script,但請檢查您的日程安排手冊。
您可以閱讀使用這個變量GET_ENVIRONMENT_VARIABLE()
http://gcc.gnu.org/onlinedocs/gcc-4.5.2/gfortran/DATE_005fAND_005fTIME.html – agentp
可以SYSTEM_CLOCK(),但我真的不明白會發生什麼,爲什麼有NULL和你想要做什麼。 –
評論,因爲我猜你的意思。如果你想自動檢測你在批處理作業中的時間限制,並在你接近時自動關閉,那麼沒有沒有標準的方法。首先你要讀你的批處理系統的文檔工作如何才能找出限制或你的工作,然後制定出一個合適的方式來傳遞你的Fortran(注意拼寫,它已經較低的情況下超過25年),然後如何檢測您是否接近該限制以及如何「乾淨地」關閉。 –