SUBROUTINE CDINTR ( * * inputs * : X, Y, NPTS, YVALUE, * * outputs * : XVALUE) * * Module Number: * * Module Name: * * Keyphrase: * ---------- * Inverse-interpolation * * Description: * ------------ * For a given functional value yvalue, find the corresponding x coordinate, * xvalue, by interpolation from the closest two points * * FORTRAN Name: CDINTR.FOR * * Keywords of Accessed Files and Tables: * -------------------------------------- * Name I/O Description / Comments * None * * Subroutines Called: * ------------------- * CDBS: * None * SDAS: * None * OTHERS: * None * * History: * -------- * Version Date Author Description * 1 07-15-86 J.-C. Hsu Design and coding * 2 09-20-87 J.-C. Hsu F77 standard * *------------------------------------------------------------------------------- * * *== input: * --input x array DOUBLE PRECISION X(1), * --input y array : Y(1), * --the function value : YVALUE * --number of input data points INTEGER NPTS * *== output: * DOUBLE PRECISION XVALUE * *== local: * DOUBLE PRECISION Y1, Y2, MIN, : DX INTEGER I, : INDXY1, INDXY2 *------------------------------------------------------------------------------- * * find the two points closest to yvalue * MIN = 1.D20 DO 10 I = 1, NPTS IF (ABS(Y(I)-YVALUE) .LT. MIN) THEN MIN = ABS (Y(I) - YVALUE) Y1 = Y(I) INDXY1 = I END IF 10 CONTINUE * MIN = 1.D20 DO 20 I = 1, NPTS IF (I .NE. INDXY1) THEN IF (ABS(Y(I)-YVALUE) .LT. MIN) THEN MIN = ABS (Y(I) - YVALUE) Y2 = Y(I) INDXY2 = I END IF END IF 20 CONTINUE * * interpolation of xvalue * DX = (YVALUE - Y1) / (Y2 - Y1) * (X(INDXY2) - X(INDXY1)) XVALUE = X(INDXY1) + DX * RETURN END