37 int pchim_(integer *n, real *
x, real *f, real *d__, integer *
42 static real zero = 0.f;
43 static real three = 3.f;
46 integer f_dim1, f_offset, d_dim1, d_offset, i__1;
51 static real h1, h2, w1, w2, del1, del2, dmin__, dmax__, hsum, drat1,
53 extern doublereal
pchst_(real *, real *);
54 static integer nless1;
56 extern int xermsg_(
char *,
char *,
char *, integer *,
57 integer *, ftnlen, ftnlen, ftnlen);
199 d_offset = 1 + d_dim1;
202 f_offset = 1 + f_dim1;
217 for (i__ = 2; i__ <= i__1; ++i__) {
218 if (x[i__] <= x[i__ - 1]) {
229 del1 = (f[(f_dim1 << 1) + 1] - f[f_dim1 + 1]) / h1;
237 d__[d_dim1 + 1] = del1;
238 d__[*n * d_dim1 + 1] = del1;
245 del2 = (f[f_dim1 * 3 + 1] - f[(f_dim1 << 1) + 1]) / h2;
251 w1 = (h1 + hsum) / hsum;
253 d__[d_dim1 + 1] = w1 * del1 + w2 * del2;
254 if (
pchst_(&d__[d_dim1 + 1], &del1) <= zero) {
255 d__[d_dim1 + 1] = zero;
256 }
else if (
pchst_(&del1, &del2) < zero) {
258 dmax__ = three * del1;
259 if ((r__1 = d__[d_dim1 + 1], dabs(r__1)) > dabs(dmax__)) {
260 d__[d_dim1 + 1] = dmax__;
267 for (i__ = 2; i__ <= i__1; ++i__) {
273 h2 = x[i__ + 1] - x[i__];
276 del2 = (f[(i__ + 1) * f_dim1 + 1] - f[i__ * f_dim1 + 1]) / h2;
281 d__[i__ * d_dim1 + 1] = zero;
282 if ((r__1 =
pchst_(&del1, &del2)) < 0.f) {
284 }
else if (r__1 == 0) {
296 if (
pchst_(&dsave, &del2) < zero) {
310 hsumt3 = hsum + hsum + hsum;
311 w1 = (hsum + h1) / hsumt3;
312 w2 = (hsum + h2) / hsumt3;
314 r__1 = dabs(del1), r__2 = dabs(del2);
315 dmax__ = dmax(r__1,r__2);
317 r__1 = dabs(del1), r__2 = dabs(del2);
318 dmin__ = dmin(r__1,r__2);
319 drat1 = del1 / dmax__;
320 drat2 = del2 / dmax__;
321 d__[i__ * d_dim1 + 1] = dmin__ / (w1 * drat1 + w2 * drat2);
331 w2 = (h2 + hsum) / hsum;
332 d__[*n * d_dim1 + 1] = w1 * del1 + w2 * del2;
333 if (
pchst_(&d__[*n * d_dim1 + 1], &del2) <= zero) {
334 d__[*n * d_dim1 + 1] = zero;
335 }
else if (
pchst_(&del1, &del2) < zero) {
337 dmax__ = three * del2;
338 if ((r__1 = d__[*n * d_dim1 + 1], dabs(r__1)) > dabs(dmax__)) {
339 d__[*n * d_dim1 + 1] = dmax__;
353 xermsg_(
"SLATEC",
"PCHIM",
"NUMBER OF DATA POINTS LESS THAN TWO", ierr, &
354 c__1, (ftnlen)6, (ftnlen)5, (ftnlen)35);
360 xermsg_(
"SLATEC",
"PCHIM",
"INCREMENT LESS THAN ONE", ierr, &
c__1, (
361 ftnlen)6, (ftnlen)5, (ftnlen)23);
367 xermsg_(
"SLATEC",
"PCHIM",
"X-ARRAY NOT STRICTLY INCREASING", ierr, &
c__1,
368 (ftnlen)6, (ftnlen)5, (ftnlen)31);
int pchim_(integer *n, real *x, real *f, real *d__, integer *incfd, integer *ierr)
int xermsg_(char *libname, char *subname, char *errmsg, integer *errcode, integer *retcode, ftnlen libname_len, ftnlen subname_len, ftnlen errmsg_len)
doublereal pchst_(real *arg1, real *arg2)