subroutine progress(i,imax,method)
integer :: i,imax
character(len=*),optional :: method
integer :: k,jmax
character(len=1) :: method_
character(len=62) :: bar="???% | | ETA "
! bar="100% |-------------50char-------------------------------| ETA "
!
method_='c';if(present(method))method_=trim(method) !s=system_clock(wall_time),c=cpu_time,d=date_and_time
!
old_time = time
time = total_time(method_)
!Get ETA
dtime = time-old_time
elapsed_time = elapsed_time + dtime
dtime = elapsed_time/real(i,4)
eta_time = dtime*imax - 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(unit=bar(1:3),fmt="(I3,$)")100*i/imax
jmax=50*i/imax
do k=1,jmax
bar(6+k:6+k)="*"
enddo
write(unit=funit(Tindex),fmt="(A1,A1,A62,I2,A1,I2.2,A1,I2.2,A1,I3.3,$)")'+',char(13), bar,h,":",m,":",s,".",ms
if(i==imax)write(funit(Tindex),*)
end subroutine progress