Print a progress bar to screen, call either with init=T or init=F
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | iter |
iter ranges from 1...n_iter |
||
| integer, | intent(in) | :: | n_iter |
iter ranges from 1...n_iter |
SUBROUTINE ProgressBar(iter,n_iter) ! MODULES !$ USE omp_lib IMPLICIT NONE !---------------------------------------------------------------------------------------------------------------------------------- ! INPUT/OUTPUT VARIABLES INTEGER,INTENT(IN) :: iter,n_iter !! iter ranges from 1...n_iter !---------------------------------------------------------------------------------------------------------------------------------- ! LOCAL VARIABLES CHARACTER(LEN=8) :: fmtstr INTEGER :: newpercent REAL(wp) :: endTime !================================================================================================================================== IF(.NOT.MPIroot)RETURN IF(iter.LE.0)THEN !INIT ProgressBar_oldpercent=0 ProgressBar_StartTime=GetTimeSerial() WRITE(UNIT_StdOut,'(4X,A,I8)') & '| 10% 20% 30% 40% 50% 60% 70% 80% 90% 100%| ... of ',n_iter WRITE(UNIT_StdOut,'(4X,A1)',ADVANCE='NO')'|' CALL FLUSH(UNIT_stdOut) ELSE newpercent=FLOOR(REAL(iter,wp)/REAL(n_iter,wp)*(100.0_wp+1.0e-12_wp)) WRITE(fmtstr,'(I4)')newpercent-ProgressBar_oldpercent IF(newpercent-ProgressBar_oldpercent.GT.0)THEN WRITE(UNIT_StdOut,'('//TRIM(fmtstr)//'("."))',ADVANCE='NO') CALL FLUSH(UNIT_stdOut) END IF ProgressBar_oldPercent=newPercent IF(newpercent.EQ.100)THEN EndTime=GetTimeSerial() WRITE(Unit_stdOut,'(A3,F8.2,A)') '| [',EndTime-ProgressBar_StartTime,' sec ]' END IF END IF END SUBROUTINE ProgressBar