C
C      ________________________________________________________
C     |                                                        |
C     |        APPROXIMATE THE SEMICONDUCTOR EQUATION          |
C     |               AT EVENLY SPACED POINTS                  |
C     |               ( CHAPTER 2 ALGORITHM )                  |
C     |________________________________________________________|
C
      REAL  NEW(50),OLD(50),D(50),U(50)
      REAL  S,T,DIF,SIZE
C                 -----------------------------------
C                 |*** INPUT NUMBER OF INTERVALS ***|
C                 -----------------------------------
10    READ(5,*) N
      IF ( N .LT. 2 ) STOP
      IF ( N .LT. 52 ) GOTO 30
      WRITE(6,20)
20    FORMAT(' ARRAY DIMENSION EXCEEDED')
      GOTO 10
C            ---------------------------------------------
C            |*** PREPROCESS AND INITIALIZE VARIABLES ***|
C            ---------------------------------------------
30    NM1 = N - 1
      S = N*N
      DO 40 I = 1,NM1
           OLD(I) = 0.
           D(I) = S + S
           U(I) = -S
40    CONTINUE
      CALL TFACT(U,D,U,NM1)
C                  --------------------------------
C                  |*** COMPUTE NEXT ITERATION ***|
C                  --------------------------------
50    DO 60 I = 1,NM1
           NEW(I) = EXP(-OLD(I))
60    CONTINUE
      CALL TSOLVE(NEW,U,D,U,NEW)
C                   -------------------------------
C                   |*** UPDATE AND TEST ERROR ***|
C                   -------------------------------
      CALL UPDATE(DIF,SIZE,NEW,OLD,NM1)
      CALL STOPIT(DIF,SIZE,4,100)
      IF ( DIF .GT. 0 ) GOTO 50
      CALL WHATIS(DIF,SIZE)
C                     --------------------------
C                     |*** PRINT THE ANSWER ***|
C                     --------------------------
      WRITE(6,70) N
70    FORMAT(I11,'  INTERVALS',/'      T               X(T)'/)
      DO 90 I = 1,NM1
           T = I/FLOAT(N)
           WRITE(6,80) T,NEW(I)
80         FORMAT(F10.5,F20.8)
90    CONTINUE
      WRITE(6,100)
100   FORMAT(//)
      GOTO 10
      END
