C C FK C FK IS A FUNCTION THAT USES LINEAR INTERPOLATION TO FIND FK, C GIVEN ZK AND THE ARRAYS Z AND F. FOR EXAMPLE, IN ROUTINE C DERIVS, BVF = FK(ALT,BVFZ,BVFF) WILL BE USED TO GET BVF AT ALT C FROM THE ARRAYS BVFZ AND BVFF. REAL FUNCTION FK(ZK,Z,F,NZ,IZTOP) REAL Z(*), F(*) C COMMON /IFLAGB/IFLAG C C MAKE SURE Z(IZTOP) .GE. ZK 5 CONTINUE IF(ZK.GT.Z(IZTOP)) THEN IZTOP = IZTOP + 1 IF(IZTOP.GT.NZ) THEN c WRITE(2,9) ZK,Z(NZ) 9 FORMAT(' ZK TOO HIGH. ZK,Z(NZ) = ',2(1PE15.5)) IZTOP = NZ FK = F(NZ) IFLAG = 1 RETURN CCC CLOSE(2) CCC CLOSE(3) CCC STOP ENDIF GO TO 5 ENDIF C IF(ZK.EQ.Z(IZTOP)) THEN FK = F(IZTOP) RETURN ENDIF C C FIND IZK SUCH THAT Z(IZK) .GT. ZK .GE. Z(IZK-1) DO 100 IZ=IZTOP,2,-1 IZM1 = IZ - 1 IF(Z(IZ).GT.ZK .AND. ZK.GE.Z(IZM1)) THEN ZRATIO = (ZK - Z(IZM1)) / (Z(IZ) - Z(IZM1)) FK = F(IZM1) + ZRATIO * (F(IZ) - F(IZM1)) IZTOP = IZM1 + 1 RETURN ENDIF 100 CONTINUE C C ZK TOO LOW ! WRITE(2,109) ZK,Z(1) c WRITE(6,109) ZK,Z(1) 109 FORMAT(' ZK TOO LOW. ZK,Z(1) = ',2(1PE15.5)) IZTOP = 2 FK = F(1) IFLAG = 1 RETURN CCC CLOSE(2) CCC CLOSE(3) CCC STOP C END