### 8.77 `ETIME` — Execution time subroutine (or function)

Description:
  `ETIME(VALUES, TIME)` returns the number of seconds of runtime since the start of the process's execution in TIME. VALUES returns the user and system components of this time in `VALUES(1)` and `VALUES(2)` respectively. TIME is equal to `VALUES(1) + VALUES(2)`.

  On some systems, the underlying timings are represented using types with sufficiently small limits that overflows (wrap around) are possible, such as 32-bit types. Therefore, the values returned by this intrinsic might be, or become, negative, or numerically less than previous values, during a single run of the compiled program.

  This intrinsic is provided in both subroutine and function forms; however, only one form can be used in any given program unit.

  VALUES and TIME are `INTENT(OUT)` and provide the following:

  | `VALUES(1)`: | User time in seconds.
  | `VALUES(2)`: | System time in seconds.
  | `TIME`: | Run time since start in seconds.

Standard:
  GNU extension
Class:
  Subroutine, function
Syntax:

  `CALL ETIME(VALUES, TIME)`.
  `TIME = ETIME(VALUES)`, (not recommended).

Arguments:

  VALUES | The type shall be `REAL(4), DIMENSION(2)`.
  TIME | The type shall be `REAL(4)`.

Return value:
  Elapsed time in seconds since the start of program execution.
Example:

                program test_etime
                    integer(8) :: i, j
                    real, dimension(2) :: tarray
                    real :: result
                    call ETIME(tarray, result)
                    print *, result
                    print *, tarray(1)
                    print *, tarray(2)
                    do i=1,100000000    ! Just a delay
                        j = i * i - i
                    end do
                    call ETIME(tarray, result)
                    print *, result
                    print *, tarray(1)
                    print *, tarray(2)
                end program test_etime

See also:
  CPU_TIME