1 subroutine ezspline_cinterp(spline_o, k, p1, p2, p3, f, ier)
15 type(EZspline3_r8) spline_o
16 integer,
intent(in) :: k
17 real(ezspline_r8),
intent(in) :: p1(k), p2(k), p3(k)
18 real(ezspline_r8),
intent(out):: f(k)
19 integer,
intent(out) :: ier
22 integer,
parameter :: ict(10)=(/1,0,0,0,0,0,0,0,0,0/)
26 REAL(EZSPLINE_R8) dxn(k)
27 REAL(EZSPLINE_R8) hx(k)
28 REAL(EZSPLINE_R8) hxi(k)
31 REAL(EZSPLINE_R8) dyn(k)
32 REAL(EZSPLINE_R8) hy(k)
33 REAL(EZSPLINE_R8) hyi(k)
36 REAL(EZSPLINE_R8) dzn(k)
37 REAL(EZSPLINE_R8) hz(k)
38 REAL(EZSPLINE_R8) hzi(k)
41 REAL(EZSPLINE_R8) ,
parameter :: sixth=0.166666666666666667_ezspline_r8
42 REAL(EZSPLINE_R8) ,
parameter :: one=1.0_ezspline_r8
43 REAL(EZSPLINE_R8) ,
parameter :: three=3.0_ezspline_r8
46 REAL(EZSPLINE_R8) z36th,z216th,xp,xpi,xp2,xpi2,cx,cxi,hx2,cxd,cxdi,yp, &
47 & ypi,yp2,ypi2,cy,cyi,hy2,cyd,cydi,zp,zpi,zp2,zpi2,cz,czi,hz2, &
52 if(spline_o%isReady /= 1)
then
57 if (spline_o%isLinear == 1)
then
59 call r8vecpc3(ict, k, p1, p2, p3, k, f, &
60 & spline_o%n1, spline_o%x1pkg(1,1), &
61 & spline_o%n2, spline_o%x2pkg(1,1), &
62 & spline_o%n3, spline_o%x3pkg(1,1), &
63 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
66 else if (spline_o%isHybrid == 1)
then
68 call r8vecintrp3d(ict, k, p1, p2, p3, k, f, &
69 & spline_o%n1, spline_o%x1pkg(1,1), &
70 & spline_o%n2, spline_o%x2pkg(1,1), &
71 & spline_o%n3, spline_o%x3pkg(1,1), &
73 & spline_o%fspl(1,1,1,1),
size(spline_o%fspl,1), &
74 &
size(spline_o%fspl,2),
size(spline_o%fspl,3), &
75 &
size(spline_o%fspl,4), iwarn, ifail)
77 else if (spline_o%isHermite ==0)
then
86 call r8xlookup(k,p1,spline_o%n1,spline_o%x1pkg(1,1),2,ix,dxn,hx,hxi,ifail)
87 call r8xlookup(k,p2,spline_o%n2,spline_o%x2pkg(1,1),2,iy,dyn,hy,hyi,ifail)
88 call r8xlookup(k,p3,spline_o%n3,spline_o%x3pkg(1,1),2,iz,dzn,hz,hzi,ifail)
96 z216th=sixth*sixth*sixth
167 & xpi*(ypi*spline_o%fspl(1,j1,j2,j3) +yp*spline_o%fspl(1,j1,j2+1,j3))+ &
168 & xp*(ypi*spline_o%fspl(1,j1+1,j2,j3)+yp*spline_o%fspl(1,j1+1,j2+1,j3))) &
170 & xpi*(ypi*spline_o%fspl(1,j1,j2,j3+1) +yp*spline_o%fspl(1,j1,j2+1,j3+1))+ &
171 & xp*(ypi*spline_o%fspl(1,j1+1,j2,j3+1)+yp*spline_o%fspl(1,j1+1,j2+1,j3+1))))
173 somme=somme+sixth*hx2*( &
175 & cxi*(ypi*spline_o%fspl(2,j1,j2,j3) +yp*spline_o%fspl(2,j1,j2+1,j3))+ &
176 & cx*(ypi*spline_o%fspl(2,j1+1,j2,j3)+yp*spline_o%fspl(2,j1+1,j2+1,j3))) &
178 & cxi*(ypi*spline_o%fspl(2,j1,j2,j3+1) +yp*spline_o%fspl(2,j1,j2+1,j3+1))+ &
179 & cx*(ypi*spline_o%fspl(2,j1+1,j2,j3+1)+yp*spline_o%fspl(2,j1+1,j2+1,j3+1))))
181 somme=somme+sixth*hy2*( &
183 & xpi*(cyi*spline_o%fspl(3,j1,j2,j3) +cy*spline_o%fspl(3,j1,j2+1,j3))+ &
184 & xp*(cyi*spline_o%fspl(3,j1+1,j2,j3)+cy*spline_o%fspl(3,j1+1,j2+1,j3))) &
186 & xpi*(cyi*spline_o%fspl(3,j1,j2,j3+1) +cy*spline_o%fspl(3,j1,j2+1,j3+1))+ &
187 & xp*(cyi*spline_o%fspl(3,j1+1,j2,j3+1)+cy*spline_o%fspl(3,j1+1,j2+1,j3+1))))
189 somme=somme+sixth*hz2*( &
191 & xpi*(ypi*spline_o%fspl(4,j1,j2,j3) +yp*spline_o%fspl(4,j1,j2+1,j3))+ &
192 & xp*(ypi*spline_o%fspl(4,j1+1,j2,j3)+yp*spline_o%fspl(4,j1+1,j2+1,j3))) &
194 & xpi*(ypi*spline_o%fspl(4,j1,j2,j3+1) +yp*spline_o%fspl(4,j1,j2+1,j3+1))+ &
195 & xp*(ypi*spline_o%fspl(4,j1+1,j2,j3+1)+yp*spline_o%fspl(4,j1+1,j2+1,j3+1))))
197 somme=somme+z36th*hx2*hy2*( &
199 & cxi*(cyi*spline_o%fspl(5,j1,j2,j3) +cy*spline_o%fspl(5,j1,j2+1,j3))+ &
200 & cx*(cyi*spline_o%fspl(5,j1+1,j2,j3)+cy*spline_o%fspl(5,j1+1,j2+1,j3))) &
202 & cxi*(cyi*spline_o%fspl(5,j1,j2,j3+1) +cy*spline_o%fspl(5,j1,j2+1,j3+1))+ &
203 & cx*(cyi*spline_o%fspl(5,j1+1,j2,j3+1)+cy*spline_o%fspl(5,j1+1,j2+1,j3+1))))
205 somme=somme+z36th*hx2*hz2*( &
207 & cxi*(ypi*spline_o%fspl(6,j1,j2,j3) +yp*spline_o%fspl(6,j1,j2+1,j3))+ &
208 & cx*(ypi*spline_o%fspl(6,j1+1,j2,j3)+yp*spline_o%fspl(6,j1+1,j2+1,j3))) &
210 & cxi*(ypi*spline_o%fspl(6,j1,j2,j3+1) +yp*spline_o%fspl(6,j1,j2+1,j3+1))+ &
211 & cx*(ypi*spline_o%fspl(6,j1+1,j2,j3+1)+yp*spline_o%fspl(6,j1+1,j2+1,j3+1))))
213 somme=somme+z36th*hy2*hz2*( &
215 & xpi*(cyi*spline_o%fspl(7,j1,j2,j3) +cy*spline_o%fspl(7,j1,j2+1,j3))+ &
216 & xp*(cyi*spline_o%fspl(7,j1+1,j2,j3)+cy*spline_o%fspl(7,j1+1,j2+1,j3))) &
218 & xpi*(cyi*spline_o%fspl(7,j1,j2,j3+1) +cy*spline_o%fspl(7,j1,j2+1,j3+1))+ &
219 & xp*(cyi*spline_o%fspl(7,j1+1,j2,j3+1)+cy*spline_o%fspl(7,j1+1,j2+1,j3+1))))
221 somme=somme+z216th*hx2*hy2*hz2*( &
223 & cxi*(cyi*spline_o%fspl(8,j1,j2,j3) +cy*spline_o%fspl(8,j1,j2+1,j3))+ &
224 & cx*(cyi*spline_o%fspl(8,j1+1,j2,j3)+cy*spline_o%fspl(8,j1+1,j2+1,j3))) &
226 & cxi*(cyi*spline_o%fspl(8,j1,j2,j3+1) +cy*spline_o%fspl(8,j1,j2+1,j3+1))+ &
227 & cx*(cyi*spline_o%fspl(8,j1+1,j2,j3+1)+cy*spline_o%fspl(8,j1+1,j2+1,j3+1))))
231 print*,
'ERROR ict(1) must be 1 (interpolation)'
238 if(ifail /= 0) ier = 97
242 call r8vecherm3(ict, k, p1, p2, p3, k, f, &
243 & spline_o%n1, spline_o%x1pkg(1,1), &
244 & spline_o%n2, spline_o%x2pkg(1,1), &
245 & spline_o%n3, spline_o%x3pkg(1,1), &
246 & spline_o%fspl(1,1,1,1), spline_o%n1, spline_o%n2, &
251 if(ifail /= 0) ier = 97