Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=8), | intent(in) | :: | TAU(M) | |||
complex(kind=8), | intent(in) | :: | C(4,MDIM) | |||
integer, | intent(in) | :: | M | |||
integer, | intent(in) | :: | MDIM | |||
complex(kind=8), | intent(inout) | :: | F(N) | |||
integer, | intent(in) | :: | N |
SUBROUTINE VSPLINE (TAU, C, M, MDIM, F, N) ! VSPLINE CALCULATES THE CUBIC SPLINE VALUES FOR A SET OF N POINTS ! IN F FROM THE M-POINT CUBI! SPLINE FIT IN ! AND THE NODES IN TAU. ! THE POINTS ARE RETURNED IN F. ALL OF THE POINTS IN F MUST LIE ! BETWEEN TAU(1) AND TAU(M). ! * * * * * * * * * * * * * WARNINGS * * * * * * * * * * * * * ! POINTS OUTSIDE OF THE SPLINE FIT REGION ARE EXTRAPOLATED FROM THE END ! INTERVALS. THIS CAN RESULT IN WILD VALUES IF EXTRAPOLATED TOO FAR. ! ALSO THE POINTS MUST BE IN STRICTLY ASCENDING ORDER, IF NOT THE ! POINTS WHICH ARE OUT OF ORDER WILL BE EXTRAPOLATED FROM THE CURRENT ! INTERVAL AGAIN RESULTING IN WILD VALUES. INTEGER, INTENT(IN) :: M, N, MDIM REAL (KIND=8), INTENT(IN) :: TAU(M) COMPLEX (KIND=8), INTENT(IN) :: C(4,MDIM) COMPLEX (KIND=8), INTENT(INOUT) :: F(N) ! Local variables INTEGER :: I, J, J1 REAL (KIND=8) :: H J = 1 DO I = 1,N 10 J1 = J + 1 IF (TAU(J1) < REAL(F(I)) .AND. J1 < M) THEN ! CHECK TO MAKE SURE J = J + 1 ! THIS POINT IS NOT GO TO 10 ! IN THE NEXT INTERVAL. END IF H = DBLE (F(I)) - TAU(J) ! DISTANCE FROM START OF INTERVAL F(I) = SPLINE (C(1,J), H) END DO RETURN END SUBROUTINE VSPLINE