eta Subroutine

public subroutine eta(i, L, step, method)

Arguments

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

Calls

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

Source Code

  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