1 SUBROUTINE spline2d(fun,x,y,nx,ny,kx,coef)
9 REAL(rprec) :: fun(*),x(*),y(*),coef(*)
14 CALL spline(x,fun(ind),nx,-1.e30_dbl,-1.e30_dbl,coef(ind))
19 SUBROUTINE spline2dt(fun_new,x_new,y_new,kx_new,nx_new,ny_new,
20 $ fun_old,x_old,y_old,kx_old,nx_old,ny_old,coef)
29 REAL(rprec) :: fun_new(*),x_new(*),y_new(*)
30 REAL(rprec) :: fun_old(*),x_old(*),y_old(*)
31 REAL(rprec) :: coef(*)
32 INTEGER :: kx_new,nx_new,ny_new
33 INTEGER :: kx_old,nx_old,ny_old
34 INTEGER :: i,j,ind,nlow
35 INTEGER,
PARAMETER :: ky_old=2000
36 REAL(rprec) :: ftemp(ky_old),ctemp(ky_old)
37 IF(ny_old.gt.ky_old)
THEN
38 WRITE(6,
'("dimensioning problem in spline2dt")')
45 CALL splint(x_old,fun_old(ind),coef(ind),nx_old,x_new(i),
48 CALL spline(y_old,ftemp,ny_old,-1.e30_dbl,-1.e30_dbl,ctemp)
51 CALL splint(y_old,ftemp,ctemp,ny_old,y_new(j),
52 $ fun_new((j-1)*kx_new+i),nlow)
58 SUBROUTINE spline1d(ynew,xnew,nnew,yold,xold,nold,y2old)
66 REAL(rprec) :: ynew(*),yold(*),xnew(*),xold(*)
67 REAL(rprec) :: y2old(*)
68 REAL(rprec) :: yp1,ypn
69 INTEGER :: nnew,nold,i,nlow
72 CALL spline(xold,yold,nold,yp1,ypn,y2old)
75 CALL splint(xold,yold,y2old,nold,xnew(i),ynew(i),nlow)
80 SUBROUTINE spline1dp(ynew,xnew,nnew,yold,xold,nold,yp1,ypn,y2old)
89 REAL(rprec) :: ynew(*),yold(*),xnew(*),xold(*)
90 REAL(rprec) :: y2old(*)
91 REAL(rprec) :: yp1,ypn
92 INTEGER :: nnew,nold,i,nlow
95 CALL spline(xold,yold,nold,yp1,ypn,y2old)
98 CALL splint(xold,yold,y2old,nold,xnew(i),ynew(i),nlow)
103 SUBROUTINE spline(x,y,n,yp1,ypn,y2)
121 INTEGER,
PARAMETER :: nmax=2000
122 REAL(rprec) :: x(*),y(*),y2(*)
123 REAL(rprec) :: u(nmax)
124 REAL(rprec) :: yp1,ypn
125 REAL(rprec) :: yp1t,ypnt,p,sig,qn,un
127 WRITE(6,
'("spline; DIMENSIONal error")')
130 IF (yp1.gt..99e30)
THEN
133 ELSE IF(yp1.lt.-.99e30)
THEN
134 yp1t=(3*x(1)**2+x(2)*x(3)+
135 $ x(2)*x(4)+x(3)*x(4)-2*x(1)*(x(2)+x(3)+x(4)))*
136 $ y(1)/((x(1)-x(2))*(x(1)-x(3))*(x(1)-x(4)))+
137 $ (-x(1)**2+x(1)*x(3)+x(1)*x(4)-x(3)*x(4))*y(2)/
138 $ ((x(1)-x(2))*(x(2)-x(3))*(x(2)-x(4)))+
139 $ (x(1)**2-x(1)*x(2)-x(1)*x(4)+x(2)*x(4))*y(3)/
140 $ ((x(1)-x(3))*(x(2)-x(3))*(x(3)-x(4)))+
141 $ (-x(1)**2+x(1)*x(2)+x(1)*x(3)-x(2)*x(3))*y(4)/
142 $ ((x(1)-x(4))*(x(2)-x(4))*(x(3)-x(4)))
144 u(1)=(3./(x(2)-x(1)))*((y(2)-y(1))/(x(2)-x(1))-yp1t)
147 u(1)=(3./(x(2)-x(1)))*((y(2)-y(1))/(x(2)-x(1))-yp1)
150 sig=(x(i)-x(i-1))/(x(i+1)-x(i-1))
153 u(i)=(6.*((y(i+1)-y(i))/(x(i+1)-x(i))-(y(i)-y(i-1))
154 $ /(x(i)-x(i-1)))/(x(i+1)-x(i-1))-sig*u(i-1))/p
156 IF (ypn.gt..99e30)
THEN
159 ELSE IF(ypn.lt.-.99e30)
THEN
160 ypnt=(-(x(-2+n)*x(-1+n))+x(-2+n)*x(n)+x(-1+n)*x(n)-x(n)**2)*
162 $ ((-x(-3+n)+x(-2+n))*(-x(-3+n)+x(-1+n))*
164 $ (x(-3+n)*x(-1+n)-x(-3+n)*x(n)-x(-1+n)*x(n)+x(n)**2)*
166 $ ((-x(-3+n)+x(-2+n))*(-x(-2+n)+x(-1+n))*
168 $ (-(x(-3+n)*x(-2+n))+x(-3+n)*x(n)+x(-2+n)*x(n)-x(n)**2)*
170 $ ((-x(-3+n)+x(-1+n))*(-x(-2+n)+x(-1+n))*
172 $ (x(-3+n)*x(-2+n)+x(-3+n)*x(-1+n)+x(-2+n)*x(-1+n)-
173 $ 2*(x(-3+n)+x(-2+n)+x(-1+n))*x(n)+3*x(n)**2)*y(n)/
174 $ ((-x(-3+n)+x(n))*(-x(-2+n)+x(n))*(-x(-1+n)+x(n)))
176 un=(3./(x(n)-x(n-1)))*(ypnt-(y(n)-y(n-1))/(x(n)-x(n-1)))
179 un=(3./(x(n)-x(n-1)))*(ypn-(y(n)-y(n-1))/(x(n)-x(n-1)))
181 y2(n)=(un-qn*u(n-1))/(qn*y2(n-1)+1.)
183 y2(k)=y2(k)*y2(k+1)+u(k)
188 SUBROUTINE splint(xa,ya,y2a,n,x,y,nlow)
199 INTEGER :: n,nlow,nhigh,nave
200 REAL(rprec) :: xa(*),ya(*),y2a(*)
207 100
IF (nhigh-nlow.gt.1)
THEN
209 IF(xa(nave).gt.x)
then
221 WRITE(6,
'( "two xa = in splinet")')
226 y=a*ya(nlow)+b*ya(nhigh)+
227 $ ((a-2.)*y2a(nlow)-(a+1.)*y2a(nhigh))*a*b*h*h/6.
231 SUBROUTINE zspline(xa,ya,y2a,n,zg,ng,za)
245 REAL(rprec) :: xa(n),ya(n),y2a(n),zg,za(n)
251 IF (ng .lt. 0 .or. ng .gt. n)stop
'zspline: wrong ng'
255 za(j)=za(j-1)+0.5*(xa(j)-xa(j-1))*(ya(j)+ya(j-1))-
256 > (xa(j)-xa(j-1))**3*(y2a(j)+y2a(j-1))/24.0
267 SUBROUTINE zsplint(xa,ya,y2a,za,n,x,y,yp,z)
274 dimension xa(n),ya(n),y2a(n),za(n)
277 1
IF (khi-klo.gt.1)
THEN
288 WRITE(6,
'(a)')
"bad xa input"
293 y=a*ya(klo)+b*ya(khi)+
294 * ((a**3-a)*y2a(klo)+(b**3-b)*y2a(khi))*(h**2)/6.
295 yp=(ya(khi)-ya(klo))/h-(3.*a**2-1.)/6.*h*y2a(klo)
296 > +(3.*b**2-1.)/6.*h*y2a(khi)
297 z=za(klo)+0.5*h*ya(klo)*(1.-a**2)+0.5*ya(khi)*h*b**2+
298 > y2a(klo)*h**3*(2.*a**2-a**4-1.)/24.-
299 > y2a(khi)*h**3*(2.*b**2-b**4)/24.