*
* $Id: tiucha.F,v 1.1.1.1 1996/02/15 17:54:57 mclareni Exp $
*
* $Log: tiucha.F,v $
* Revision 1.1.1.1  1996/02/15 17:54:57  mclareni
* Kernlib
*
*
#include "kerngent/pilot.h"
      SUBROUTINE TIUCHA

#include "kerngent/mkcde.inc"

      INTEGER TINF(4),TINF2,TINF22

      DIMENSION    MCHA(600), MBIN(400), MHIS(200)
      EQUIVALENCE (IA(401), MCHA(401), MBIN(201), MHIS(1))

      DIMENSION    PBIN(3), PHIS(3)
      EQUIVALENCE (NX   ,PBIN(1)), (DX   ,PBIN(2)), (XL   ,PBIN(3))
      EQUIVALENCE (NXHIS,PHIS(1)), (DXHIS,PHIS(2)), (XLHIS,PHIS(3))

      DATA         NX   /20/,  DX   /2./,  XL   /11./
      DATA         NXHIS/20/,  DXHIS/.5/,  XLHIS/11./

      DATA  NEXP   / 3 /
      DATA  BIAS   / .001 /

      DATA TINF /10000,4HIUCH,0,4H    /, TINF2/4HIUBI/, TINF22/4HIUHI/

C-    DATA GROUPS   1 - 20  INSIDE, LOWER BIN EDGE EXACT
C-                 21 - 40  INSIDE, JUST BELOW UPPER BIN EDGE
C-                 41 - 50  UNDERFLOWS
C-                 51 - 60  OVERFLOWS

      CALL NEWGUY ('IUCHAN - IUBIN - IUHIST.','TIUCHA  ')
      CALL VZERO (A,2000)

C----              RUN INSIDE LIMITS

      DO 29  J=1,20
      X = XL + DX*FLOAT(J-1)
      MCHA(J)    = IUCHAN (X,XL,DX,NX)
      MBIN(J)    = IUBIN  (X,PBIN(1),MBIN(J+60))
      MHIS(J)    = IUHIST (X,PHIS(1),MHIS(J+60))
      IB  (J)    = J

      X  =  X + DX - BIAS
      MCHA(J+20) = IUCHAN (X,XL,DX,NX)
      MBIN(J+20) = IUBIN  (X,PBIN(1),MBIN(J+80))
      MHIS(J+20) = IUHIST (X,PHIS(1),MHIS(J+80))
   29 IB  (J+20) = J
      CALL VFILL (IB(61),40,.FALSE.)

C----              RUN UNDERFLOW

      FACT = 2 ** NEXP
      FACT = FACT * 1.007

      X  = XL - BIAS
      MCHA(41)   = IUCHAN (X,XL,DX,NX)
      MBIN(41)   = IUBIN  (X,PBIN(1),MBIN(101))
      MHIS(41)   = IUHIST (X,PHIS(1),MHIS(101))

      X  = -1.
      DO 39  J=1,9
      X  = X * FACT
      MCHA(J+41) = IUCHAN (X,XL,DX,NX)
      MBIN(J+41) = IUBIN  (X,PBIN(1),MBIN(J+101))
      MHIS(J+41) = IUHIST (X,PHIS(1),MHIS(J+101))
   39 CONTINUE

      CALL VZERO (IB(41),10)
      CALL VFILL (IB(101),20,.TRUE.)

C----              RUN OVERFLOW

      XH  =  XL + DX*FLOAT(NX)
      X   =  XH + BIAS
      MCHA(51)   = IUCHAN (X,XL,DX,NX)
      MBIN(51)   = IUBIN  (X,PBIN(1),MBIN(111))
      MHIS(51)   = IUHIST (X,PHIS(1),MHIS(111))

      Y  =  1.
      DO 49  J=1,9
      Y  = Y * FACT
      X  = XH + Y
      MCHA(J+51) = IUCHAN (X,XL,DX,NX)
      MBIN(J+51) = IUBIN  (X,PBIN(1),MBIN(J+111))
      MHIS(J+51) = IUHIST (X,PHIS(1),MHIS(J+111))
   49 CONTINUE
      CALL VFILL (IB(51),10,NX+1)

C----              CHECK

      CALL MVERII (1,MCHA,IB,60)
      CALL MVERII (2,MBIN,IB,120)
      CALL MVERII (3,MHIS,IB,120)

C----              TIMING

      IF (ITIMES.EQ.0) RETURN
      NTIMES = ITIMES*TINF(1)
      TINF(1) = NTIMES
      CALL TIMED (TIMERD)
      AX=15.

         DO 80 J=1,NTIMES
   80 IA(1)=IUCHAN (AX,XL,DX,NX)

      CALL TIMING (TINF)
      TINF(2)=TINF2
      CALL TIMED (TIMERD)

         DO 82 J=1,NTIMES
   82 IA(1) = IUBIN (AX,PBIN,SPILL)

      CALL TIMING (TINF)
      TINF(2)=TINF22
      CALL TIMED (TIMERD)

         DO 84 J=1,NTIMES
   84 IA(1) = IUHIST (AX,PHIS,SPILL)

      CALL TIMING (TINF)
      RETURN

      END