1 SUBROUTINE spline_it(ndata, xdata, ydata, npts, x, y, i_full)
7 INTEGER,
INTENT(IN) :: ndata, npts, i_full
8 REAL(rprec),
DIMENSION(ndata),
INTENT(IN):: xdata, ydata
9 REAL(rprec),
DIMENSION(npts),
INTENT(IN) :: x
10 REAL(rprec),
DIMENSION(npts),
INTENT(OUT):: y
11 REAL(rprec),
DIMENSION(:),
ALLOCATABLE :: xfull, yfull,
18 ALLOCATE(xfull(ndata+i_full), yfull(ndata+i_full),
19 1 dyfull(ndata+i_full), wk(2*(ndata+i_full)),
20 2 dy(npts), stat=ierr)
21 IF (ierr .ne. 0) stop
'Allocation error in SPLINE_IT'
23 IF (i_full .eq. 1)
THEN
26 xfull(2:ndata) = 0.5_dp*(xdata(1:ndata-1)+xdata(2:ndata))
27 yfull(1) = ydata(1) + (xdata(1) + 1)*
28 1 (ydata(2)-ydata(1))/(xdata(2)-xdata(1))
29 yfull(2:ndata) = 0.5_dp*(ydata(1:ndata-1)+ydata(2:ndata))
30 yfull(ndata+1) = ydata(ndata) + (1 - xdata(ndata))*
31 1 (ydata(ndata-1)-ydata(ndata))/(xdata(ndata-1)-xdata(ndata))
33 xfull(1:ndata) = xdata(1:ndata)
34 yfull(1:ndata) = ydata(1:ndata)
40 iwk = 2*(ndata+i_full)
43 CALL pchez(ndata+i_full, xfull, yfull, dyfull, lspline,
45 IF(ierr.lt.0) stop
'LEGENDRE: error in SPLINE_IT'
47 CALL pchev(ndata+i_full, xfull, yfull, dyfull,
48 1 npts, x, y, dy, ierr)
49 IF(ierr.lt.0) stop
'LEGENDRE: error in EVAL_SPLINE'
51 DEALLOCATE(xfull, yfull, dyfull, wk, dy)
53 END SUBROUTINE spline_it