subroutine eta(i,L,step,method)
integer :: i
integer :: L
integer,optional :: step
character(len=*),optional :: method
!
integer,save :: mod_print
integer :: percent,iprint
integer,save :: older=0,oldiprint=0
logical :: esc,fullprint
integer(4),dimension(8) :: dummy
character(len=16) :: string
character(len=1) :: method_
character(len=80) :: message
logical,save :: lentry=.true.
!
method_='c';if(present(method))method_=trim(method) !s=system_clock(wall_time),c=cpu_time,d=date_and_time
!
!Preambolo:
if(lentry)then
mod_print=10;if(present(step))mod_print=step
if(funit(Tindex)/=6)then
write(string,"(I4)")funit(Tindex)
write(*,"(2x,A,I3)")"+ETA --> unit:"//trim(adjustl(trim(string)))
endif
lentry=.false.
endif
!
if(i==L)lentry=.true.
!
!avoid repetition of percentage (within the error)
percent=int(100.0*i/L)
if(percent==0)return
if(percent==older)return
if(percent<mod_print)return
older=percent
!
!set step for printing:
esc=.true.
iprint=percent/mod_print
if(iprint/=oldiprint)esc=.false.
if(esc)return
oldiprint=iprint
!
!check if fullprint (date) is needed
fullprint=.false.;if(any(percent==[10,50,100]))fullprint=.true.
!
old_time = time
time = total_time(method_) !time since the start of the clock
!Get ETA:
dtime = time-old_time
elapsed_time = elapsed_time + dtime
dtime = elapsed_time/real(i,4)
eta_time = dtime*L - elapsed_time
!
ms = int(fraction(eta_time)*1000.0)
h = int(eta_time/secs_in_one_hour)
m = int((eta_time - h*secs_in_one_hour)/secs_in_one_min)
s = int(eta_time - h*secs_in_one_hour - m*secs_in_one_min)
!
write(funit(Tindex),"(1x,1i3,1a7,i3.3,a1,i2.2,a1,i2.2,a1,i3.3)",advance='no')percent,"% |ETA: ",h,":",m,":",s,".",ms
if(fullprint)then
call date_and_time(values=dummy)
write(funit(Tindex),"(a2,i2,1x,a,1x,i4,2x,i2,a1,i2.2,a1,i2.2)")&
" @",dummy(3),trim(month(dummy(2))),dummy(1),dummy(5),':',dummy(6),':',dummy(7)
else
write(funit(Tindex),"(1X)")
endif
end subroutine eta