19 SUBROUTINE pchim (N, X, F, D, INCFD, IERR)
154 INTEGER N, INCFD, IERR
155 REAL X(*), F(incfd,*), D(incfd,*)
160 REAL DEL1, DEL2, DMAX, DMIN, DRAT1, DRAT2, DSAVE,
161 * h1, h2, hsum, hsumt3, three, w1, w2, zero
164 DATA zero /0./, three /3./
169 IF ( n .LT. 2 )
GO TO 5001
170 IF ( incfd .LT. 1 )
GO TO 5002
172 IF ( x(i).LE.x(i-1) )
GO TO 5003
180 del1 = (f(1,2) - f(1,1))/h1
185 IF (nless1 .GT. 1)
GO TO 10
194 del2 = (f(1,3) - f(1,2))/h2
200 w1 = (h1 + hsum)/hsum
202 d(1,1) = w1*del1 + w2*del2
203 IF ( pchst(d(1,1),del1) .LE. zero)
THEN 205 ELSE IF ( pchst(del1,del2) .LT. zero)
THEN 208 IF (abs(d(1,1)) .GT. abs(dmax)) d(1,1) = dmax
214 IF (i .EQ. 2)
GO TO 40
220 del2 = (f(1,i+1) - f(1,i))/h2
226 IF ( pchst(del1,del2) ) 42, 41, 45
231 IF (del2 .EQ. zero)
GO TO 50
232 IF ( pchst(dsave,del2) .LT. zero) ierr = ierr + 1
244 hsumt3 = hsum+hsum+hsum
245 w1 = (hsum + h1)/hsumt3
246 w2 = (hsum + h2)/hsumt3
247 dmax = max( abs(del1), abs(del2) )
248 dmin = min( abs(del1), abs(del2) )
251 d(1,i) = dmin/(w1*drat1 + w2*drat2)
259 w2 = (h2 + hsum)/hsum
260 d(1,n) = w1*del1 + w2*del2
261 IF ( pchst(d(1,n),del2) .LE. zero)
THEN 263 ELSE IF ( pchst(del1,del2) .LT. zero)
THEN 266 IF (abs(d(1,n)) .GT. abs(dmax)) d(1,n) = dmax
279 CALL xermsg (
'SLATEC',
'PCHIM',
280 +
'NUMBER OF DATA POINTS LESS THAN TWO', ierr, 1)
286 CALL xermsg (
'SLATEC',
'PCHIM',
'INCREMENT LESS THAN ONE', ierr,
293 CALL xermsg (
'SLATEC',
'PCHIM',
'X-ARRAY NOT STRICTLY INCREASING' subroutine xermsg(LIBNAME, SUBNAME, ERRMSG, ERRCODE, RETCODE)
subroutine pchim(N, X, F, D, INCFD, IERR)