1      SUBROUTINE TLIN4X(X1,X2,X3,X4,Y,NX1,NX2,NX3,NX4,XA1,XA2,XA3,XA4,YA
2     1,LX1L,LX2L,LX3L,LX4L,LX1U,LX2U,LX3U,LX4U,MESS,NMSS,ROUT)
3C
4C***  LINEAR INTERPOLATION OF Y=F(X1,X2,X3,X4)
5C     ----STRUCTURE OF Y ARRAY IS Y(NX2,NX1,NX3,NX4)
6C
7      DIMENSION Y(1),X1(1),X2(1),X3(1),X4(1),
8     1          DA(3),MESS(20),ROUT(2)
9      DIMENSION MSSCL(21),RMSCL(21)
10      EQUIVALENCE (RMSCL(1),MSSCL(1))
11      LOGICAL NOIN4,NAS4,X4A,X4B,MSSG4,EX4,LG(7)
12      EQUIVALENCE (NOIN4,LG(1)),(X4A,LG(2)),(X4B,LG(3)),(MSSG4,LG(4)),
13     1       (EX4,LG(5)),(DA(1),D0),(DA(2),D1),(DA(3),D2),(NAS4,LG(6))
14      DATA TLIN/4H1TIN/,HOL1/4H1EXP/
15      DATA MSSCL/4HTLIN,4H4X  ,2*0,4,16*0/
16C
17C     ----INITIALIZE SWITCHES.
18C
19      CALL SWITCH(LG,LX4L,LX4U,XA4,X4,NX4)
20      IF(LG(7))GO TO 1110
21 1000 CALL GLOOK(NX4,XA4,X4,NAS4,NOIN4,I4,T4)
22 1010 N123=NX1*NX2*NX3
23      LOC=N123*(I4-1)+1
24         DO 1030 I=1,2
25         IX=4-I
26         GO TO 1140
27 1020    IF(NOIN4)GO TO 1070
28         IF(I.EQ.1)LOC=LOC-N123
29 1030 CONTINUE
30      IF(.NOT.EX4)GO TO 1050
31      IF(NX4.LT.3)GO TO 1040
32      IF(X4A.AND.LX4U.GT.1)GO TO 1120
33      IF(X4B.AND.LX4L.GT.1) GO TO 1180
34 1040 IF(X4A)GO TO 1190
35 1050 D0=D1
36 1060 D2=D0+T4*(D2-D1)
37 1070 YA=D2
38 1080 IF(MSSG4.OR.RO.EQ.HOL1)GO TO 1090
39      RETURN
40 1090 CONTINUE
41C
42C     ----SUPRESS MESSAGE IF CALLED BY INTERX
43C
44      IF(ROUT(1).NE.TLIN)GO TO 1100
45      ROUT(1)=HOL1
46      RETURN
47C
48C     ----PRINT EXTRAPOLATION MESSAGE.
49C
50 1100 MSSCL(3)=NMSS
51      RMSCL(4)=YA
52C
53C     ----1ST VARIABLE.
54C
55      RMSCL(6)=XA1
56      MSSCL(7)=NX1
57      MSSCL(8)=LX1L
58      MSSCL(9)=LX1U
59C
60C     ----2ND VARIABLE.
61C
62      RMSCL(10)=XA2
63      MSSCL(11)=NX2
64      MSSCL(12)=LX2L
65      MSSCL(13)=LX2U
66C
67C     ----3RD VARIABLE.
68C
69      RMSCL(14)=XA3
70      MSSCL(15)=NX3
71      MSSCL(16)=LX3L
72      MSSCL(17)=LX3U
73C
74C     ----4TH VARIABLE
75C
76      RMSCL(18)=XA4
77      MSSCL(19)=NX4
78      MSSCL(20)=LX4L
79      MSSCL(21)=LX4U
80      CALL MESSGE(ROUT,MESS,X1,X2,X3,X4,MSSCL)
81      RETURN
82C
83C     ----HERE FOR EXTRAPOLATION.
84C
85 1110 IF(X4B)GO TO 1160
86C
87C     ----HERE FOR XA4 ABOVE.
88C
89      T4=XA4-X4(NX4)
90      I4=NX4
91      GO TO 1170
92 1120 LOC=LOC-N123
93      I4=I4-2
94      IX=1
95 1130 I=0
96 1140 RO=TLIN
97      CALL TLIN3X(X1,X2,X3,Y(LOC),NX1,NX2,NX3,XA1,XA2,XA3,DA(IX),LX1L,
98     1 LX2L,LX3L,LX1U,LX2U,LX3U,MESS,NMSS,RO)
99      IF(I.NE.0)GO TO 1020
100 1150 CALL QUAD(X4(I4),DA,XA4,YA)
101      GO TO 1080
102C
103C     ----HERE FOR XA4 BELOW.
104C
105 1160 T4=XA4-X4(1)
106      I4=2
107 1170 T4=T4/(X4(I4)-X4(I4-1))
108      GO TO 1010
109 1180 D0=D1
110      D1=D2
111      I4=1
112      LOC=LOC+2*N123
113      IX=3
114      GO TO 1130
115 1190 D0=D2
116      GO TO 1060
117      END
118