VSPLINE Subroutine

public subroutine VSPLINE(TAU, C, M, MDIM, F, N)

Arguments

Type IntentOptional 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

Calls

proc~~vspline~~CallsGraph proc~vspline VSPLINE proc~spline SPLINE proc~vspline->proc~spline

Source Code

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