MODULE r_precision  ! Precision for reals.

  IMPLICIT NONE
  INTEGER, PARAMETER, PUBLIC :: prec = SELECTED_REAL_KIND(2*PRECISION(1.0))  ! old DOUBLE PRECISION
!  INTEGER, PARAMETER, PUBLIC :: prec = SELECTED_REAL_KIND(12) 
!  INTEGER, PARAMETER, PUBLIC :: prec = SELECTED_REAL_KIND(6)  ! do not work very well
END MODULE r_precision

MODULE param  ! Parameters
  USE r_precision, ONLY : prec      ! Precision for reals.
  IMPLICIT NONE

! Intrinsic Functions
  INTRINSIC TINY,HUGE

! Parameters
  INTEGER, PARAMETER, PUBLIC :: maxeps = 20, maxnrs = 2000
  REAL(KIND=prec), PARAMETER, PUBLIC :: &
       zero    = 0.0_prec,    & ! 
       half    = 0.5_prec,    & ! 
       one     = 1.0_prec,    & ! 
       large   = HUGE(zero),  & !
       small   = TINY(zero)     ! 


END MODULE param

MODULE exe_time  ! Execution time.
  IMPLICIT NONE

  PUBLIC :: getime

CONTAINS
  SUBROUTINE getime(tim)  ! Execution time.
  IMPLICIT NONE
      
! Scalar Arguments
    REAL, INTENT(OUT):: tim  ! Current time, REAL argument.

! Intrinsic Functions
    INTRINSIC CPU_TIME

    CALL CPU_TIME(tim)

  END SUBROUTINE getime

END MODULE exe_time
