Fortran程序的进度条
对于较复杂的程序,需要对程序的进程进行控制与观察,进度条不乏是一个程序调适运行的好助手,在程序运行的是后还可以调动眼球注意力,放松大脑皮层。废话少说,经过搜集发现有两种设置程序进度条的方法。
一个主要功能是暂停输出
program progress
integer :: i, j
write(*,'(A)') 'Starting working.'
do i=1,50
call sleepqq (10) ! simulate 1sec of run time
! write(*,'(A$)') '*'
! write (*,'($,A)') '*'
write(*,'(A\)') '*'
end do
write(*,'(/A)') 'Done.'
end
另一个方法是
program test1
integer :: n
character(2) :: percent = '%' // char(13)
do n = 1,100
call sleepqq (10) ! simulate 1sec of run time
write (*,'(i2,a\)') n, percent
end do
end
加上时间设定,既可以知道程序运行总时间:
program test1
integer :: n
character(2) :: percent = '%' // char(13)
integer :: n_p_sec, ia, ie; real :: t !!! Variable for timetest
write(*,'(A)') 'Starting working.'
call system_clock(count_rate=n_p_sec)!once !!! timetest 时间间隔dt 间隔/秒
call system_clock(count=ia) !!! timetest 起始时间to
do n = 1,100
call sleepqq (10) ! simulate 1sec of run time
write (*,'(i2,a\)') n, percent
end do
call system_clock(count=ie) !!! timetest 最后时间t1
t = (ie-ia)/real(n_p_sec) !!! timetest 总时间=(t1-to)/dt
write(unit=*,fmt=*) "Time in second:",t !!! timetest
end
以上程序在CVF6.6编译没有问题,没有的朋友可以修改call sleepqq (10) 为
do j=1,100000
end do
进行测试。
此帖为个人Blog的一边文章,欢迎转载!
http://zhousicheng.googlepages.com/a_050
一个主要功能是暂停输出
program progress
integer :: i, j
write(*,'(A)') 'Starting working.'
do i=1,50
call sleepqq (10) ! simulate 1sec of run time
! write(*,'(A$)') '*'
! write (*,'($,A)') '*'
write(*,'(A\)') '*'
end do
write(*,'(/A)') 'Done.'
end
另一个方法是
program test1
integer :: n
character(2) :: percent = '%' // char(13)
do n = 1,100
call sleepqq (10) ! simulate 1sec of run time
write (*,'(i2,a\)') n, percent
end do
end
加上时间设定,既可以知道程序运行总时间:
program test1
integer :: n
character(2) :: percent = '%' // char(13)
integer :: n_p_sec, ia, ie; real :: t !!! Variable for timetest
write(*,'(A)') 'Starting working.'
call system_clock(count_rate=n_p_sec)!once !!! timetest 时间间隔dt 间隔/秒
call system_clock(count=ia) !!! timetest 起始时间to
do n = 1,100
call sleepqq (10) ! simulate 1sec of run time
write (*,'(i2,a\)') n, percent
end do
call system_clock(count=ie) !!! timetest 最后时间t1
t = (ie-ia)/real(n_p_sec) !!! timetest 总时间=(t1-to)/dt
write(unit=*,fmt=*) "Time in second:",t !!! timetest
end
以上程序在CVF6.6编译没有问题,没有的朋友可以修改call sleepqq (10) 为
do j=1,100000
end do
进行测试。
此帖为个人Blog的一边文章,欢迎转载!
http://zhousicheng.googlepages.com/a_050