1 subroutine r8evintrp2d(xget,yget,x,nx,y,ny,jspline,
2 > f,icoeff,ixdim,iydim,ict,fval,ier)
16 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
28 integer :: ixdim,iydim
32 real*8 f(icoeff,ixdim,iydim)
123 call vecin2d_argchk(
'evintrp2d',jspline,
124 > icoeff,nx,ny,ixdim,iydim,ier)
127 call r8herm2xy(xget,yget,x,nx,y,ny,0,0,
128 > i,j,xparam,yparam,hx,hxi,hy,hyi,ier)
131 call r8fvintrp2d(ict,1,1,
132 > fval,i,j,xparam,yparam,hx,hxi,hy,hyi,
133 > jspline,f,icoeff,ixdim,iydim)
141 subroutine r8fvintrp2d(ict,ivec,ivecd,
142 > fval,ii,jj,xparam,yparam,hx,hxi,hy,hyi,
143 > jspline,fin,icoeff,ixdim,iydim)
147 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
152 integer ii(ivec),jj(ivec)
153 real*8 xparam(ivec),yparam(ivec)
156 real*8 hx(ivec),hy(ivec)
157 real*8 hxi(ivec),hyi(ivec)
160 integer :: jspline(2)
162 integer :: ixdim,iydim
163 real*8 fin(icoeff,ixdim,iydim)
181 integer :: i,j,i1,i2,zonrank,linrank,cubrank
182 integer :: imaxx,imaxy,imaxdlin,imaxdcub
183 logical :: splin_flag
186 integer :: iderivs(2,6),ict4(4),maxd_lin(4),maxd_cub(4)
188 integer :: idcub,idlin
189 real*8 :: xp,dxlin,dxlini,h,hi,ans1,ans2
192 real*8,
parameter :: one = 1.0_r8
200 if(jspline(i).eq.-1)
then
201 zonrank = zonrank + 1
203 else if(jspline(i).eq.0)
then
204 linrank = linrank + 1
207 splin_flag = jspline(i).eq.2
208 cubrank = cubrank + 1
212 if(cubrank.eq.2)
then
215 call r8fvbicub(ict,ivec,ivecd,
216 > fval,ii,jj,xparam,yparam,hx,hxi,hy,hyi,
223 if(maxval(iderivs(1:2,i)).le.1)
then
225 indx=2*iderivs(2,i) + iderivs(1,i) + 1
227 call r8herm2fcn(ict4,ivec,ivecd,
228 > fval(1,i),ii,jj,xparam,yparam,hx,hxi,hy,hyi,
242 if(cubrank.eq.0)
then
243 if(jspline(1).eq.0)
then
249 if(jspline(2).eq.0)
then
256 if((iderivs(1,i).le.imaxx).and.(iderivs(2,i).le.imaxy))
then
257 if(linrank.eq.2)
then
260 indx=2*iderivs(2,i) + iderivs(1,i) + 1
262 call r8pc2fcn(ict4,ivec,ivecd,
263 > fval(1,i),ii,jj,xparam,yparam,hx,hxi,hy,hyi,
265 else if(zonrank.eq.2)
then
268 fval(j,i)=fin(1,ii(j),jj(j))
272 if(jspline(1).eq.0)
then
275 if(iderivs(1,i).eq.0)
then
276 fval(j,i)=(one-xparam(j))*fin(1,ii(j),jj(j))
277 > +xparam(j)*fin(1,ii(j)+1,jj(j))
279 fval(j,i)=(fin(1,ii(j)+1,jj(j)) -
280 > fin(1,ii(j),jj(j)))*hxi(j)
286 if(iderivs(2,i).eq.0)
then
287 fval(j,i)=(one-yparam(j))*fin(1,ii(j),jj(j))
288 > +yparam(j)*fin(1,ii(j),jj(j)+1)
290 fval(j,i)=(fin(1,ii(j),jj(j)+1) -
291 > fin(1,ii(j),jj(j)))*hyi(j)
313 if(linrank.eq.1)
then
320 if(jspline(1).ge.1)
then
328 if((maxd_lin(i).le.imaxdlin).and.
329 > (maxd_cub(i).le.imaxdcub))
then
330 if(linrank.eq.1)
then
332 if(jspline(1).ge.1)
then
341 f22(1:2,1)=fin(1:2,i1,i2)
342 f22(1:2,2)=fin(1:2,i1+1,i2)
348 f22(1:2,1)=fin(1:2,i1,i2+1)
349 f22(1:2,2)=fin(1:2,i1+1,i2+1)
356 fval(j,i)=(ans2-ans1)*hyi(j)
358 fval(j,i)=ans2*dxlin + ans1*dxlini
371 f22(1:2,1)=fin(1:2,i1,i2)
372 f22(1:2,2)=fin(1:2,i1,i2+1)
378 f22(1:2,1)=fin(1:2,i1+1,i2)
379 f22(1:2,2)=fin(1:2,i1+1,i2+1)
386 fval(j,i)=(ans2-ans1)*hxi(j)
388 fval(j,i)=ans2*dxlin + ans1*dxlini
395 if(jspline(1).ge.1)
then
402 f22(1:2,1)=fin(1:2,i1,i2)
403 f22(1:2,2)=fin(1:2,i1+1,i2)
418 f22(1:2,1)=fin(1:2,i1,i2)
419 f22(1:2,2)=fin(1:2,i1,i2+1)
450 if(ict(1).le.(2))
then
470 else if(ict(1).eq.3)
then
484 else if(ict(1).eq.4)
then
495 else if(ict(1).eq.5)
then
503 else if(ict(1).eq.6)
then
509 end subroutine dtrans
511 subroutine add1(idx,idy)
514 integer,
intent(in) :: idx,idy
519 if(jspline(1).le.0)
then
528 if(jspline(2).le.0)
then
529 maxd_lin(inum)=max(maxd_lin(inum),idy)
531 maxd_cub(inum)=max(maxd_cub(inum),idy)
538 real*8,
intent(out) :: ans
544 real*8 :: xpi,xp2,xpi2,cx,cxi,hx2,cxd,cxdi
547 data sixth/0.166666666666666667_r8/
558 cxi=xpi*(xpi2-1.0_r8)
561 ans=xpi*f22(1,1) +xp*f22(1,2)
562 ans=ans+sixth*hx2*(cxi*f22(2,1) +cx*f22(2,2))
564 else if(idcub.eq.1)
then
571 cxd=3.0_r8*xp2-1.0_r8
572 cxdi=-3.0_r8*xpi2+1.0_r8
574 ans=hi*(f22(1,2)-f22(1,1))
575 ans=ans+sixth*h*(cxdi*f22(2,1) +cxd*f22(2,2))
577 else if(idcub.eq.2)
then
581 ans=xpi*f22(2,1) + xp*f22(2,2)
586 ans = hi*(f22(2,2)-f22(2,1))
594 real*8,
intent(out) :: ans
600 real*8 :: xpi,xp2,xpi2,ax,axbar,bx,bxbar
601 real*8 :: axp,axbarp,bxp,bxbarp
610 ax=xp2*(3.0_r8-2.0_r8*xp)
615 ans=axbar*f22(1,1) + ax*f22(1,2)
616 ans=ans + h*(bxbar*f22(2,1) + bx*f22(2,2))
623 bxp=xp*(3.0_r8*xp-2.0_r8)
624 bxbarp=xpi*(3.0_r8*xpi-2.0_r8)
626 ans=hi*(axbarp*f22(1,1) +axp*f22(1,2))
627 ans=ans + bxbarp*f22(2,1) + bxp*f22(2,2)