4 subroutine r8bcspeval(xget,yget,iselect,fval,
5 > x,nx,y,ny,ilinx,iliny,f,inf3,ier)
8 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
10 integer ilinx,iliny,nx,ny,inf3,ier
14 real*8 x(nx),y(ny),f(4,4,inf3,ny)
114 call r8bcspevxy(xget,yget,x,nx,y,ny,ilinx,iliny,
115 > i(1),j(1),dx(1),dy(1),ier)
118 call r8bcspevfn(iselect,1,1,fval,i,j,dx,dy,f,inf3,ny)
128 subroutine r8bcspevxy(xget,yget,x,nx,y,ny,ilinx,iliny,
134 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
135 INTEGER nxm,nym,ii,jj
138 real*8 zxget,zyget,zxtol,zytol
165 if((xget.lt.x(1)).or.(xget.gt.x(nx)))
then
166 zxtol=4.0e-7_r8*max(abs(x(1)),abs(x(nx)))
167 if((xget.lt.x(1)-zxtol).or.(xget.gt.x(nx)+zxtol))
then
169 write(6,1001) xget,x(1),x(nx)
170 1001
format(
' ?bcspeval: xget=',1pe11.4,
' out of range ',
171 > 1pe11.4,
' to ',1pe11.4)
173 if((xget.lt.x(1)-0.5_r8*zxtol).or.
174 > (xget.gt.x(nx)+0.5_r8*zxtol))
175 >
write(6,1011) xget,x(1),x(nx)
176 1011
format(
' %bcspeval: xget=',1pe15.8,
' beyond range ',
177 > 1pe15.8,
' to ',1pe15.8,
' (fixup applied)')
178 if(xget.lt.x(1))
then
185 if((yget.lt.y(1)).or.(yget.gt.y(ny)))
then
186 zytol=4.0e-7_r8*max(abs(y(1)),abs(y(ny)))
187 if((yget.lt.y(1)-zytol).or.(yget.gt.y(ny)+zytol))
then
189 write(6,1002) yget,y(1),y(ny)
190 1002
format(
' ?bcspeval: yget=',1pe11.4,
' out of range ',
191 > 1pe11.4,
' to ',1pe11.4)
193 if((yget.lt.y(1)-0.5_r8*zytol).or.(yget.gt.y(ny)+0.5_r8*zytol))
194 >
write(6,1012) yget,y(1),y(ny)
195 1012
format(
' %bcspeval: yget=',1pe15.8,
' beyond range ',
196 > 1pe15.8,
' to ',1pe15.8,
' (fixup applied)')
197 if(yget.lt.y(1))
then
212 ii=1+nxm*(zxget-x(1))/(x(nx)-x(1))
214 if(zxget.lt.x(i))
then
216 else if(zxget.gt.x(i+1))
then
220 if((1.le.i).and.(i.lt.nxm))
then
221 if((x(i).le.zxget).and.(zxget.le.x(i+1)))
then
224 call r8zonfind(x,nx,zxget,i)
228 call r8zonfind(x,nx,zxget,i)
233 jj=1+nym*(zyget-y(1))/(y(ny)-y(1))
235 if(zyget.lt.y(j))
then
237 else if(zyget.gt.y(j+1))
then
241 if((1.le.j).and.(j.lt.nym))
then
242 if((y(j).le.zyget).and.(zyget.le.y(j+1)))
then
245 call r8zonfind(y,ny,zyget,j)
249 call r8zonfind(y,ny,zyget,j)
261 subroutine r8bcspevfn(ict,ivec,ivd,fval,iv,jv,dxv,dyv,f,inf3,ny)
267 INTEGER,
PARAMETER :: R8=selected_real_kind(12,100)
319 integer iv(ivec),jv(ivec)
320 REAL*8 dxv(ivec),dyv(ivec)
323 REAL*8 f(4,4,inf3,ny)
364 if((ict(1).gt.0).or.(ict(1).eq.-1))
then
373 > f(1,1,i,j)+dy*(f(1,2,i,j)+dy*(f(1,3,i,j)+dy*f(1,4,i,j)))
374 > +dx*(f(2,1,i,j)+dy*(f(2,2,i,j)+dy*(f(2,3,i,j)+dy*f(2,4,i,j)))
375 > +dx*(f(3,1,i,j)+dy*(f(3,2,i,j)+dy*(f(3,3,i,j)+dy*f(3,4,i,j)))
376 > +dx*(f(4,1,i,j)+dy*(f(4,2,i,j)+dy*(f(4,3,i,j)+dy*f(4,4,i,j))))))
380 if((ict(2).gt.0).and.(ict(1).ne.-1))
then
389 > f(2,1,i,j)+dy*(f(2,2,i,j)+dy*(f(2,3,i,j)+dy*f(2,4,i,j)))
391 > f(3,1,i,j)+dy*(f(3,2,i,j)+dy*(f(3,3,i,j)+dy*f(3,4,i,j)))
393 > f(4,1,i,j)+dy*(f(4,2,i,j)+dy*(f(4,3,i,j)+dy*f(4,4,i,j)))
398 if((ict(3).gt.0).and.(ict(1).ne.-1))
then
407 > f(1,2,i,j)+dy*(2.0_r8*f(1,3,i,j)+dy*3.0_r8*f(1,4,i,j))
408 > +dx*(f(2,2,i,j)+dy*(2.0_r8*f(2,3,i,j)+dy*3.0_r8*f(2,4,i,j))
409 > +dx*(f(3,2,i,j)+dy*(2.0_r8*f(3,3,i,j)+dy*3.0_r8*f(3,4,i,j))
410 > +dx*(f(4,2,i,j)+dy*(2.0_r8*f(4,3,i,j)+dy*3.0_r8*f(4,4,i,j))
415 if((ict(4).gt.0).or.(ict(1).eq.-1))
then
425 > f(3,1,i,j)+dy*(f(3,2,i,j)+dy*(f(3,3,i,j)+dy*f(3,4,i,j))))
427 > f(4,1,i,j)+dy*(f(4,2,i,j)+dy*(f(4,3,i,j)+dy*f(4,4,i,j))))
431 if((ict(5).gt.0).or.(ict(1).eq.-1))
then
440 > 2.0_r8*f(1,3,i,j)+6.0_r8*dy*f(1,4,i,j)
441 > +dx*(2.0_r8*f(2,3,i,j)+6.0_r8*dy*f(2,4,i,j)
442 > +dx*(2.0_r8*f(3,3,i,j)+6.0_r8*dy*f(3,4,i,j)
443 > +dx*(2.0_r8*f(4,3,i,j)+6.0_r8*dy*f(4,4,i,j))))
447 if((ict(6).gt.0).and.(ict(1).ne.-1))
then
456 > f(2,2,i,j)+dy*(2.0_r8*f(2,3,i,j)+dy*3.0_r8*f(2,4,i,j))
457 > +2._r8*dx*(f(3,2,i,j)+dy*(2.0_r8*f(3,3,i,j)+dy*3.0_r8*f(3,4,i,j))
458 >+1.5_r8*dx*(f(4,2,i,j)+dy*(2.0_r8*f(4,3,i,j)+dy*3.0_r8*f(4,4,i,j))
463 if(ict(1).eq.-1)
then
471 > 4.0_r8*f(3,3,i,j)+12.0_r8*dy*f(3,4,i,j)
472 > +dx*(12.0_r8*f(4,3,i,j)+36.0_r8*dy*f(4,4,i,j))
479 else if(ict(1).eq.3)
then
489 > f(4,1,i,j)+dy*(f(4,2,i,j)+dy*(f(4,3,i,j)+dy*f(4,4,i,j))))
503 > f(3,2,i,j)+dy*(2.0_r8*f(3,3,i,j)+dy*3.0_r8*f(3,4,i,j)))
505 > f(4,2,i,j)+dy*(2.0_r8*f(4,3,i,j)+dy*3.0_r8*f(4,4,i,j)))
518 > (2.0_r8*f(2,3,i,j)+6.0_r8*dy*f(2,4,i,j)
519 > +2.0_r8*dx*(2.0_r8*f(3,3,i,j)+6.0_r8*dy*f(3,4,i,j)
520 > +1.5_r8*dx*(2.0_r8*f(4,3,i,j)+6.0_r8*dy*f(4,4,i,j))
532 fval(v,iaval)=6.0_r8*(f(1,4,i,j)+
533 > dx*(f(2,4,i,j)+dx*(f(3,4,i,j)+dx*f(4,4,i,j))))
540 else if(ict(1).eq.4)
then
550 > f(4,2,i,j)+dy*2.0_r8*(f(4,3,i,j)+dy*1.5_r8*f(4,4,i,j)))
563 > 4.0_r8*f(3,3,i,j)+12.0_r8*dy*f(3,4,i,j)
564 > +dx*(12.0_r8*f(4,3,i,j)+36.0_r8*dy*f(4,4,i,j))
577 > +2.0_r8*dx*(f(3,4,i,j)+1.5_r8*dx*f(4,4,i,j)))
584 else if(ict(1).eq.5)
then
593 > +12.0_r8*(f(4,3,i,j)+dy*3.0_r8*f(4,4,i,j))
605 > 12.0_r8*(f(3,4,i,j)+dx*3.0_r8*f(4,4,i,j))
612 else if(ict(1).eq.6)
then