c***********************************************************************
      program timeTHIS
c***********************************************************************
c Example showing calibration and usage of timing routine irtc() on T3D.
c This timer returns elapsed clock ticks from real-time clock.
c Based on code by T.Kohno (T.Williams)
c~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      real TicksPerSec
      parameter (TicksPerSec = 1500015001.0)
      integer StartTime,EndTime,TCal,TotalTime
      integer i,dummy,pe,npes
      real xx,TotalSecs
      intrinsic MY_PE
c***********************************************************************

c To avoid division on T3D, store 1/TicksPerSec:
      SecsPerTick = 1.0/TicksPerSec

c Call timer once to make sure it sets up its own internal tables, etc.
      dummy = irtc()

c Call timer twice to compute overhead for typical call pair (calibrate
c the timer); convert to seconds and store as floating-point numbers:
      StartTime = irtc()
      EndTime = irtc()
c Store the calibration value (in seconds):
      TCal = EndTime - StartTime
      
c Time a loop:
      StartTime = irtc()
      xx = 0.0
      do i=1,100000
        xx = xx + i
      enddo
      EndTime = irtc()
      TotalSecs = (EndTime - StartTime - TCal)*SecsPerTick

c Write the timing and calibration results:
      pe = MY_PE()
      npes = N$PES
      write(*,*) 'pe ',pe,' looptime = ',TotalSecs,' secs. (Tcal = ',
     $  TCal,' tics)'
c This prevents the loop from getting removed by optimization in cf77:
      if (pe .eq. 0) write(*,*) 'zzz Ignore this line...',xx

      call exit(0)
      end
