progress Subroutine

public subroutine progress(i, imax, method)

Arguments

Type IntentOptional Attributes Name
integer :: i
integer :: imax
character(len=*), optional :: method

Calls

proc~~progress~~CallsGraph proc~progress progress mpi_wtime mpi_wtime proc~progress->mpi_wtime proc~check_mpi check_MPI proc~progress->proc~check_mpi mpi_initialized mpi_initialized proc~check_mpi->mpi_initialized

Source Code

  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